En fait non, le nouveau chemin risque d'être génant.
Est-ce qu'il y aura toujours "STACK" dans le nom de tes fichiers ?
Version imprimable
En fait non, le nouveau chemin risque d'être génant.
Est-ce qu'il y aura toujours "STACK" dans le nom de tes fichiers ?
Et pour ce script la :
franchement tu peux m'expliquer un peu les commandes car la je suis perdu OoCode:
1
2
3
4
5
6 for i in $(echo server-tftp/*/* | sed -e 's/\([[:alnum:]/]*-[0-9]*\)[[:graph:]]*\( \|$\)/\1\n/g' | sort -u) do stat -c "%Y;%n;%F" -t ${i}* | grep -v directory | sort -n | head -n -5 | cut -d\; -f2 | xargs echo #stat -c "%Y;%n;%F" -t ${i}* | grep -v directory | sort -n | head -n -5 | cut -d\; -f2 | xargs rm -f done
Merci
Oui il y a toujours "STACK" dans le nom de fichier... en fait le switch sont en piles...
en fait, il est très bien mon script, il fallait juste l'adapter pour qu'il utilise la date de dernière modification en tant qu'index du tableau, au lieu d'une indexation par défaut.
il faut aussi le réinitialiser complétement.
les tableaux indexés, contrairement aux tableaux associatifs, conservent l'ordre des index.
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 #!/bin/bash shopt -s nullglob for d in /tftpboot/save-sw-ur/*/ do for f in $d* do ff="${f##$d}" ff="${ff%%-*}" if test -n $files then lfiles="${files[@]: -1}" if [[ $lfiles == *$ff* ]] then files[$(stat -c %Y "$f")]="$f" else test ${#files[@]} -gt 5 && printf 'rm %s\n' "${files[@]::${#files[@]}-5}" # test ${#files[@]} -gt 5 && rm "${files[@]::${#files[@]}-5}" files=() files[$(stat -c %Y "$f")]="$f" fi else files=() files[$(stat -c %Y "$f")]="$f" fi done done test ${#files[@]} -gt 5 && printf 'rm %s\n' "${files[@]::${#files[@]}-5}" #test ${#files[@]} -gt 5 && rm "${files[@]::${#files[@]}-5}"
:calim2: la je suis en train de pleurer...
c'est possible d'avoir une ou deux explications...?
Y a a beau script mais franchement j'y comprend pas grand chose...
Merci
Ok,
Le problème c'est que je suis au travail et un peu occupé:
alors voici déja le script modifié:
En bref,Code:
1
2
3
4
5 for i in $(echo /tftpboot/save-sw-ur/*/* | sed -e 's/\(STACK[0-9]*-[[:alnum:]]*\)[[:graph:]]*\( \|$\)/\1\n/g' | sort -u) do stat -c "%Y;%n;%F" -t ${i}* | grep -v directory | sort -n | head -n -5 | cut -d\; -f2 | xargs echo #stat -c "%Y;%n;%F" -t ${i}* | grep -v directory | sort -n | head -n -5 | cut -d\; -f2 | xargs rm -f done
Le for boucle sur la racine unique de chaque groupe de fichier.
exemple:
devientCode:/tftpboot/save-sw-ur/CM420/STACK1-CM420-Feb--4-2013-10-24-11-GMT-0
Dans la boucle, on fait un stat sur tout les fichier qui commence par cette racine pour récupérer la date de dernière modification (en seconde depuis 01/01/1970), le nom du fichier, le type ensuite on grep pour viré les type directory puis on tri selon la date en seconde (sort -n) puis on vire les 5 dernières lignes (head -n -5), on ne récupère ensuite que le nom du fichier (cut ...) et enfin on affiche ou rm (xargs ...).Code:/tftpboot/save-sw-ur/CM420/STACK1-CM420
Cordialement.
ça, c'est pour récupérer le nom du switchCode:
1
2 ff="${f##$d}" ff="${ff%%-*}"
et ça, c'est pour afficher/supprimer le tableau sans ses 5 derniers éléments.Code:"${files[@]::${#files[@]}-5}"
bon je commence à comprendre petit à petit... mais c'est pas encore gagné ;)
j'ai essayé le script à disedorgue (car c'est le plus simple :P)
par contre je me demande si ça marche... en fait ça scanne seulement un répertoire... le 1er de l'ordre alphabétique...
Peux-tu donner le résultat de la commande qui calcul les arguments du for ?
Cordialement.Code:echo /tftpboot/save-sw-ur/*/* | sed -e 's/\(STACK[0-9]*-[[:alnum:]]*\)[[:graph:]]*\( \|$\)/\1\n/g' | sort -u
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60 /tftpboot/save-sw-ur/CM422/3750-Dec-20-08-42-42.542-0 /tftpboot/save-sw-ur/CM422 /3750-Feb--4-11-03-36.395-12 /tftpboot/save-sw-ur/CM422/3750-Feb--4-11-04-01.560 -13 /tftpboot/save-sw-ur/CM422/3750-Feb--4-11-04-25.198-14 /tftpboot/save-sw-ur/ CM422/3750-Jan-21-09-02-15.665-1 /tftpboot/save-sw-ur/CM422/3750-Jan-21-10-11-19 .203-2 /tftpboot/save-sw-ur/CM422/3750-Jan-21-10-34-47.108-3 /tftpboot/save-sw-u r/CM422/3750-Jan-21-14-41-40.354-4 /tftpboot/save-sw-ur/CM422/3750-Jan-22-09-18- 36.003-5 /tftpboot/save-sw-ur/CM422/3750-Jan-23-10-18-17.955-6 /tftpboot/save-sw -ur/CM422/3750-Jan-23-13-44-35.916-7 /tftpboot/save-sw-ur/CM422/3750-Jan-23-13-4 9-06.559-8 /tftpboot/save-sw-ur/CM422/3750-Jan-23-13-55-02.973-9 /tftpboot/save- sw-ur/CM422/3750-Jan-24-09-14-37.652-10 /tftpboot/save-sw-ur/CM422/3750-Jan-24-0 9-32-03.036-11 /tftpboot/save-sw-ur/CM422/Stack1-Dec-20-08-28-29-GMT-0 /tftpboot /save-sw-ur/CM422/Stack1-Dec-20-08-32-41-GMT-1 /tftpboot/save-sw-ur/CM422/Stack1 -Dec-20-09-40-35-GMT-2 /tftpboot/save-sw-ur/CM422/Stack1-Dec-20-15-32-21-GMT-3 / tftpboot/save-sw-ur/CM422/Stack1-Dec-20-15-33-27-GMT-4 /tftpboot/save-sw-ur/CM42 2/Stack1-Dec-20-15-47-06-GMT-5 /tftpboot/save-sw-ur/CM422/Stack2--Mar-30-22-40-3 7.427-0 /tftpboot/save-sw-ur/CM422/Stack2--Mar-31-05-55-52.202-1 /tftpboot/save- sw-ur/CM422/Stack3--Mar-30-22-36-36.789-0 /tftpboot/save-sw-ur/CM422/Stack3--Mar -31-05-53-12.236-1 /tftpboot/save-sw-ur/CM422/Stack4--Apr--1-05-42-37.332-2 /tft pboot/save-sw-ur/CM422/Stack4--Apr--1-05-43-56.903-3 /tftpboot/save-sw-ur/CM422/ Stack4--Apr-21-03-34-05.917-4 /tftpboot/save-sw-ur/CM422/Stack4--Apr-25-04-39-40 .556-5 /tftpboot/save-sw-ur/CM422/Stack4--Mar-30-22-36-24.883-0 /tftpboot/save-s w-ur/CM422/Stack4--Mar-31-21-45-20.544-1 /tftpboot/save-sw-ur/CM422/Stack4--May- 12-00-44-52.744-6 /tftpboot/save-sw-ur/CM422/Stack5--Mar-30-22-31-12.575-0 /tftp boot/save-sw-ur/CM422/Stack5--Mar-31-05-49-32.371-1 /tftpboot/save-sw-ur/CM422/S tack5--May--4-04-23-12.081-2 /tftpboot/save-sw-ur/CM422/Stack5--May--4-04-23-43. 649-3 /tftpboot/save-sw-ur/CM422/Stack5--May--4-04-40-12.251-4 /tftpboot/save-sw -ur/CM422/Stack5--May--4-04-43-48.562-5 /tftpboot/save-sw-ur/CM422/Stack5--May-- 5-06-36-30.156-6 /tftpboot/save-sw-ur/CM422/Stack5--May--5-06-40-54.083-7 /tftpb oot/save-sw-ur/CM422/sw-crl-cm420-Feb--4-11-06-33.792-0 /tftpboot/save-sw-ur/CM4 22/sw-crl-cm420-Feb--5-10-54-53.607-1 /tftpboot/save-sw-ur/UR381/STACK1-UR381 /tftpboot/save-sw-ur/UR381/STACK1-UR381 /tftpboot/save-sw-ur/UR381/SW-CRL-UR381-Feb--4-2013-11-46-52.765-GMT-6 /tftpboot /save-sw-ur/UR381/SW-CRL-UR381-Feb--4-2013-13-13-15.606-GMT-7 /tftpboot/save-sw- ur/UR381/SW-CRL-UR381-Feb--4-2013-13-17-06.839-GMT-0 /tftpboot/save-sw-ur/UR381/ SW-CRL-UR381-Feb--5-2013-12-50-54.540-GMT-1 /tftpboot/save-sw-ur/UR381/SW-CRL-UR 381-Jan-29-2013-11-11-11.243-GMT-1 /tftpboot/save-sw-ur/UR381/SW-CRL-UR381-Jan-2 9-2013-11-18-34.659-GMT-2 /tftpboot/save-sw-ur/UR381/SW-CRL-UR381-Jan-29-2013-12 -10-14.041-GMT-3 /tftpboot/save-sw-ur/UR381/SW-CRL-UR381-Jan-29-2013-15-07-52.89 7-GMT-4 /tftpboot/save-sw-ur/UR381/SW-CRL-UR381-Jan-31-2013-14-33-09.201-GMT-5 / tftpboot/save-sw-ur/UR420/STACK6-CM420 /tftpboot/save-sw-ur/UR420/STACK6-CM420 /tftpboot/save-sw-ur/UR630/3750-Dec-20-08-45-15.328-0 /tftpboot/save-sw-ur/UR630 /Stack1--Apr-24-19-29-34-GMT-4 /tftpboot/save-sw-ur/UR630/Stack1--Apr-24-19-29-4 7-GMT-5 /tftpboot/save-sw-ur/UR630/Stack1--Apr-24-19-29-55-GMT-6 /tftpboot/save- sw-ur/UR630/Stack1--Apr-24-19-30-04-GMT-7 /tftpboot/save-sw-ur/UR630/Stack1--Apr -24-19-30-08-GMT-8 /tftpboot/save-sw-ur/UR630/Stack1--Apr-24-19-30-15-GMT-9 /tft pboot/save-sw-ur/UR630/Stack1--Apr-24-19-30-37-GMT-10 /tftpboot/save-sw-ur/UR630 /Stack1--Apr-24-19-31-24-GMT-11 /tftpboot/save-sw-ur/UR630/Stack1--Apr-24-19-32- 00-GMT-12 /tftpboot/save-sw-ur/UR630/Stack1--Apr-24-19-40-59-GMT-13 /tftpboot/sa ve-sw-ur/UR630/Stack1--Apr-24-19-41-07-GMT-14 /tftpboot/save-sw-ur/UR630/Stack1- -Apr-24-19-41-12-GMT-15 /tftpboot/save-sw-ur/UR630/Stack1--Apr-24-19-41-27-GMT-1 6 /tftpboot/save-sw-ur/UR630/Stack1--Apr-24-19-41-38-GMT-17 /tftpboot/save-sw-ur /UR630/Stack1--Apr-24-20-14-05-GMT-18 /tftpboot/save-sw-ur/UR630/Stack1--Apr-24- 20-15-04-GMT-19 /tftpboot/save-sw-ur/UR630/Stack1--Apr--7-21-11-35-GMT-2 /tftpbo ot/save-sw-ur/UR630/Stack1--Apr--7-21-15-09-GMT-3 /tftpboot/save-sw-ur/UR630/Sta ck1--Mar-13-12-44-14-GMT-1 /tftpboot/save-sw-ur/UR630/Stack2--Mar-13-12-46-52-GM T-0 /tftpboot/save-sw-ur/UR630/Stack3--Mar-13-13-33-23-GMT-0 /tftpboot/save-sw-u r/UR630/sw-crl-UR630-Feb--4-12-23-43.846-0 /tftpboot/save-sw-ur/UR630/sw-crl-UR6 30-Feb--4-12-23-50.691-1 /tftpboot/save-sw-ur/UR630/sw-crl-UR630-Feb--4-2013-13- 31-43.684-GMT-2
Voilouuuuu
Ok, la regex n'est pas bonne.
On va donc en essayer une autre qui ce base sur le format de la date.
Peux-tu donc essayer ceux-ci et retourner le résultat:
Donc ici, il faut que tous les noms des fichiers soient dans le format:Code:find /tftpboot/save-sw-ur/ -type f | sed 's/\(.*\)-\(Jan\|Feb\|Mar\|Apr\|May\|Jun\|Jul\|Aug\|Sep\|Oct\|Nov\|Dec\)-[[:graph:]]\+/\1/g' | sort -u
le find ici sert juste a n'avoir qu'un seul nom de fichier par ligne au lieu du 'echo *' qui crée une seule ligne avec tous les noms de fichiers (juste pour simplifier la regex)Code:<racine_du_fichier>-<mois_en_3_lettres>-<suite_de_caractère_imprimable_sauf_espace>
Cordialement.
Yeahhhhhhh ca marche deja pas mal ca!!!
Voici le retour... Bon y a d'autres fichiers qui apparaissent mais je dois les ignorer... ils ne doivent pas être pris en compte (enfin tout ce qui commence par "conf"...)
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 /tftpboot/save-sw-ur/CM422/3750 /tftpboot/save-sw-ur/CM422/Stack1 /tftpboot/save-sw-ur/CM422/Stack2- /tftpboot/save-sw-ur/CM422/Stack3- /tftpboot/save-sw-ur/CM422/Stack4- /tftpboot/save-sw-ur/CM422/Stack5- /tftpboot/save-sw-ur/CM422/sw-crl-cm420 /tftpboot/save-sw-ur/conf-bs1-691.cfg /tftpboot/save-sw-ur/conf-bs2-691.cfg /tftpboot/save-sw-ur/conf-bs3-691.cfg /tftpboot/save-sw-ur/conf-bs4-691.cfg /tftpboot/save-sw-ur/conf-bs5-691.cfg /tftpboot/save-sw-ur/conf-bs6-691.cfg /tftpboot/save-sw-ur/conf-cm691.cfg /tftpboot/save-sw-ur/conf-ers1-691.cfg /tftpboot/save-sw-ur/conf-ers1-710.cfg /tftpboot/save-sw-ur/conf-ers2-691.cfg /tftpboot/save-sw-ur/conf-es1-710.cfg /tftpboot/save-sw-ur/config-ur710-pp1.cfg /tftpboot/save-sw-ur/config-ur710-pp2.cfg /tftpboot/save-sw-ur/conf-ur691-pp.cfg /tftpboot/save-sw-ur/ur381bps1.cfg /tftpboot/save-sw-ur/ur381bps2.cfg /tftpboot/save-sw-ur/UR381/STACK1-UR381 /tftpboot/save-sw-ur/UR381/STACK1-UR381-1 /tftpboot/save-sw-ur/UR381/STACK1-UR381-2 /tftpboot/save-sw-ur/UR381/SW-CRL-UR381 /tftpboot/save-sw-ur/UR420/STACK6-CM420 /tftpboot/save-sw-ur/UR630/3750 /tftpboot/save-sw-ur/UR630/Stack1- /tftpboot/save-sw-ur/UR630/Stack2- /tftpboot/save-sw-ur/UR630/Stack3- /tftpboot/save-sw-ur/UR630/sw-crl-UR630
suffit de faire une selection avec une regexp au lieu de *
contre conf
par exemple un echo........| grep -v 'conf-*" | ................à adapter avec tes besoins.
Ou bien de rajouter la même regex que le sed au niveau du find, ce qui donnerait:
Le problème ici, c'est que pour donner une regex correcte, il faut avoir toutes les informations.Code:find /tftpboot/save-sw-ur/ -type f -regex '.*-\(Jan\|Feb\|Mar\|Apr\|May\|Jun\|Jul\|Aug\|Sep\|Oct\|Nov\|Dec\)-.*' | sed 's/\(.*\)-\(Jan\|Feb\|Mar\|Apr\|May\|Jun\|Jul\|Aug\|Sep\|Oct\|Nov\|Dec\)-[[:graph:]]\+/\1/g' | sort -u
Donc dans le principe, ici, je demande au find de ne retourner que les fichiers qui possède le format que le sed traite (voir mon poste précédent).