Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 28/01/2008, à 13: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, à 13:11

Sciensous

Re : Purger un repertoire mais garder les 5 derniers fichiers

un petit man find ?

#3 Le 28/01/2008, à 14: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, à 14:15)

Hors ligne

#4 Le 28/01/2008, à 18: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 wink pour le moment je ne suis pas capable de partir d'un man et imaginer le script qui utilisera la commande sad
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 big_smile
Merci beaucoup !
@ plus

#5 Le 28/01/2008, à 18: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 wink

Dernière modification par Gari (Le 28/01/2008, à 18:42)

Hors ligne

#6 Le 29/01/2008, à 13: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, à 13: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, à 16: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, à 17: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 wink

Hors ligne

#10 Le 29/01/2008, à 17: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, à 20: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, à 20:49)

Hors ligne

#12 Le 29/01/2008, à 22:36

insomniak

Re : Purger un repertoire mais garder les 5 derniers fichiers

Merci Freebird pour cette explication ! cool

Hors ligne

#13 Le 30/01/2008, à 10: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, à 15: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