#1 Le 28/01/2008, à 12:07
- Insomniak49
Purger un repertoire mais garder les 5 derniers fichiers
Bonjour à tous,
Dans le cadre d'un backup journalier d'une base mysql, je realise un dump de toutes mes bases de données. J'ai pu, grace à ce forum, me faire un petit script nickel qui realise ça. J'etais egalement tombé sur un post ou quelqu'un avait fait un script secondaire qui supprimait tous les fichiers en ne laissant que les 5 fichiers les plus récents. Malheureusement je n'arrive pas à retomber dessus (et la fonction recherche du forum ne m'aide pas beaucoup à ce sujet, elle a l'air de pas mal debloquer...)
Bref, je voulais savoir si quelqu'un pouvait me donner une piste sur ce sujet svp ?
Merci par avance
@ bientot
#2 Le 28/01/2008, à 12:11
- Sciensous
Re : Purger un repertoire mais garder les 5 derniers fichiers
un petit man find ?
#3 Le 28/01/2008, à 13:15
- freebird
Re : Purger un repertoire mais garder les 5 derniers fichiers
Une simple boucle avec un ls et un tail devrait faire l'affaire :
ls -t | tail +6 | while read fic
do
if test -f $fic
then
rm $fic
fi
done
Dernière modification par freebird (Le 28/01/2008, à 13:15)
Hors ligne
#4 Le 28/01/2008, à 17:23
- Insomniak49
Re : Purger un repertoire mais garder les 5 derniers fichiers
Salut à tous !
Merci pour les indications.
Alors Sciensous, navré mais je suis SciensousLess pour le moment je ne suis pas capable de partir d'un man et imaginer le script qui utilisera la commande
En fait, là ou j'ai encore du mal, c'est de me dire que telle commande va me sortir telle donnée à l'écran mais si je fais un | bidule, je vais pouvoir exploiter le nom du fichier... bref, pour l'instant c'est pas encore acquis ^^
Par contre, Freebird, grace à ton exemple, j'ai pu comprendre comment ce genre de choses fonctionnent.
pour résumer :
le ls -t affiche les fichiers du repertoire courant triés par ordre de date
le tail +6 (qui sous ubuntu est plutot tail -n +6) donne les 6 plus vieux à partir du sixeme (donc n'effacera pas les 5 premiers)
enfin le while read fic se sert de cette sortie pour pouvoir supprimer chaque fichier incriminé
Cool
Merci beaucoup !
@ plus
#5 Le 28/01/2008, à 17:41
- Gari
Re : Purger un repertoire mais garder les 5 derniers fichiers
Juste une question, je ne comprends pas l'utilité du test sur la présence du fichier. Si c'est pour éviter de supprimer un éventuel répertoire, alors cela signifie qu'on ne garde finalement pas les 5 derniers fichiers du répertoires (puisqu'un répertoire se serait glissé parmi les 5 fichiers). Ai-je tord ?
Finalement, j'aurais tendance à proposer:
ls -t | tail -n +6 | while read fic
do
rm -f "$fic"
done
(encapsuler $fic par des guillemets permet d'éviter les erreurs dues à des espaces dans les noms de fichiers).
Bon ok, c'est un peu de l'enc... de mouche
Dernière modification par Gari (Le 28/01/2008, à 17:42)
Hors ligne
#6 Le 29/01/2008, à 12:01
- insomniak49
Re : Purger un repertoire mais garder les 5 derniers fichiers
Lut !
Je crois que ce petit script mérite qu'on s'y penche... Car si pour certain cela parait limpide et basique, pour moi ça ne l'est pas et il y a des choses interressantes à comprendre.
Gari, j'ai remarqué que le tail -n +6 est totalement différent de tail -n 6
Je n'ai pas encore compris quelle était cette nuance mais toujours est-il que le résultat n'est pas le meme.
Le tail -n 6 ne me renvoie que les 6 derniers de la liste fichiers et repertoires confondus
Le tail -n +6 me renvoie 5 repertoires sur 7 et 7 fichiers sur 10
Donc à priori, je serais plutot de l'avis de freebird et voici donc (je pense) le script final qui fait bien son boulot (c'est à dire supprimer tous les fichiers sauf les 5 plus récents et bien entendu conserver les repertoires)
ls -t | tail -n +6 | while read fic
do
if test -f $fic
then
rm $fic
fi
done
Voilou !
@ +
#7 Le 29/01/2008, à 12:09
- johnlege
Re : Purger un repertoire mais garder les 5 derniers fichiers
Bonjour
find est là pour toi
remplace le ls -l par rm -f quand tu es sur de ton coup
Attention cela ne conserve pas les 5 derniers fichiers qui était ta demande mais conserve les fichiers modifiés il y a moins de 10 jours, efface donc ceux qui ont été modifiés depuis plus de 10 jours.
find ton_repertoire -type f -mtime +10 -exec ls -l "{}" ";"
find recherche
ton_repertoire ton repertoire o๠tu as ta sauvegarde
-type f des fichiers
-mtime +10 modifiés depuis plus de 10 jours
-exec execute la commande
ls -l liste longue (à remplacer par rm -f pour supprimer)
"{}" le fichier en cours trouvé par find
";" fin de la commande
Merci d'indiquer résolu dans le titre quand c'est résolu
Hors ligne
#8 Le 29/01/2008, à 15:00
- insomniak49
Re : Purger un repertoire mais garder les 5 derniers fichiers
Merci johnlege
Interressant aussi cette commande ! autre façon de voir les choses et autre façon de procéder mais très interressant !
Thx
#9 Le 29/01/2008, à 16:22
- freebird
Re : Purger un repertoire mais garder les 5 derniers fichiers
Le test -f permet de lancer un rm que sur les fichiers car le ls retourne aussi les répertoires.
L'ajout de guillemets est une bonne idée. J'ai des habitudes d' "Unixien", je n'ai jamais de fichiers avec des espaces
Hors ligne
#10 Le 29/01/2008, à 16:55
- insomniak
Re : Purger un repertoire mais garder les 5 derniers fichiers
J'avais pigé que tu passais par le test-f pour savoir si c'est un fichier ou non (j'ai été checker à droite à gauche car je viens juste d'apprendre ce fameux "test" ^^
Sinon, quelqu'un pourrait-il expliquer la réelle différence entre tail -n 6 et tail -n +6 ? j'avoue que je ne comprend toujours pas o_O
Hors ligne
#11 Le 29/01/2008, à 19:49
- freebird
Re : Purger un repertoire mais garder les 5 derniers fichiers
Par défaut tail t'affiche les 10 dernières lignes d'un fichier.
tail -n 6 revient à dire que tu ne veux que les 6 dernières au lieu des 10.
tail -n +6 demande d'afficher les dernières lignes du fichier à partir de la ligne numéro 6.
Dernière modification par freebird (Le 29/01/2008, à 19:49)
Hors ligne
#12 Le 29/01/2008, à 21:36
- insomniak
Re : Purger un repertoire mais garder les 5 derniers fichiers
Merci Freebird pour cette explication !
Hors ligne
#13 Le 30/01/2008, à 09:46
- insomniak
Re : Purger un repertoire mais garder les 5 derniers fichiers
Euhhhh, je me permet de revenir sur le script.
Imaginons que tu n'aies pas que des fichiers dans ce repertoire.
Le script n'est plus valable vu qu'il va également prendre dans les 6 lignes ces répertoires, donc le nombre de fichiers conservés au final est faussé.
D'autant plus que si j'ai 6 répertoires créés récemment, tous les fichiers seront supprimés.
Donc avis à la population : script à utiliser avec précaution...
Hors ligne
#14 Le 30/01/2008, à 14:14
- freebird
Re : Purger un repertoire mais garder les 5 derniers fichiers
Si tu ne veux prendre en compte que les fichiers, tu peux faire ça :
nbfic=6
cptfic=0
ls -t | while read fic
do
if test -f ${fic}
then
let cptfic=${cptfic}+1
if [ ${cptfic} -gt ${nbfic} ]
then
rm "${fic}"
fi
fi
done
Hors ligne