Suppression de fichiers de plus de 7 jours


80

J'écris ci-dessous la commande pour supprimer tous les fichiers de plus de 7 jours, mais cela ne fonctionne pas:

find /media/bkfolder/ -mtime +7 -name'*.gz' -exec rm {} \;

Comment puis-je supprimer ces fichiers?


5
Il devrait y avoir un espace entre nameet '*.gz'.
Jos

Réponses:


137

Comme @Jos l'a souligné, vous avez manqué un espace entre nameet '*.gz'; aussi pour accélérer l'utilisation de commandes -type foption pour exécuter la commande sur f iles uniquement.

Donc, la commande fixe serait:

find /path/to/ -type f -mtime +7 -name '*.gz' -execdir rm -- '{}' \;

Explication:

  • find: La commande unix pour trouver f iles / d irectories / l encres et etc.
  • /path/to/: le répertoire dans lequel démarrer votre recherche.
  • -type f: ne trouve que des fichiers.
  • -name '*.gz': liste les fichiers qui finissent par .gz.
  • -mtime +7: ne considérer que ceux dont le temps de modification est supérieur à 7 jours.
  • -execdir ... \;: pour chaque résultat trouvé, effectuez la commande suivante dans ....
  • rm -- '{}': supprimer le fichier; la {}partie est l'endroit où le résultat de la recherche est remplacé par la partie précédente. --signifie que les paramètres de fin de commande évitent les erreurs d'invite pour les fichiers commençant par un trait d' union .

Sinon, utilisez:

find /path/to/ -type f -mtime +7 -name '*.gz' -print0 | xargs -r0 rm --

De l' homme trouver :

-print0 
      True; print the full file name on the standard output, followed by a null character 
  (instead of the newline character that -print uses). This allows file names that contain
  newlines or other types of white space to be correctly interpreted by programs that process
  the find output. This option corresponds to the -0 option of xargs.

Ce qui est un peu plus efficace, car cela revient à:

rm file1 file2 file3 ...

par opposition à:

rm file1; rm file2; rm file3; ...

comme dans la -execméthode.


Une alternative et aussi plus rapide commande utilise exec de +la terminaison au lieu de\; :

find /path/to/ -type f -mtime +7 -name '*.gz' -execdir rm -- '{}' +

Cette commande ne sera exécutée rmqu'une fois à la fin au lieu de chaque fois qu'un fichier est trouvé et cette commande est presque aussi rapide que d'utiliser l' -deleteoption suivante find:

find /path/to/ -type f -mtime +7 -name '*.gz' -delete

3
Pourquoi ne pas aller directement -deleteà la fin? Pourquoi jouer avec le +ou \;?
rain01 le


3

Faites attention en supprimant les fichiers avec find. Exécutez la commande avec -ls pour vérifier ce que vous supprimez.

find /media/bkfolder/ -mtime +7 -name '*.gz' -ls . Ensuite, tirez la commande de l'historique et ajoutez-exec rm {} \;

Limitez les dégâts qu'une commande de recherche peut faire. Si vous souhaitez supprimer des fichiers d'un seul répertoire, -maxdepth 1empêche find de parcourir les sous-répertoires ou de rechercher le système complet si vous tapez /media/bkfolder /.

Les autres limites que j’ajoute sont des arguments de nom plus spécifiques -name 'wncw*.gz', comme l’ ajout d’un temps plus récent -mtime -31et la citation des répertoires recherchés. Celles-ci sont particulièrement importantes si vous automatisez des nettoyages.

find "/media/bkfolder/" -maxdepth 1 -type f -mtime +7 -mtime -31 -name 'wncw*.gz' -ls -exec rm {} \;

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.