web-dev-qa-db-fra.com

Suppression de fichiers de plus de 7 jours

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?

71
Malihe Pakyari

Comme @Jos l'a souligné, vous avez manqué un espace entre nameet '*.gz'; Également, pour accélérer la commande, utilisez l'option -type f afin de l'exécuter uniquement sur f .

Donc, la commande fixe serait:

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

Explication:

  • findname__: la commande unix permettant de trouver f iles/ d irectories/ l encres, etc.
  • /path/to/: le répertoire dans lequel démarrer votre recherche.
  • -type f: ne trouve que les 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é, exécutez la commande suivante dans ....
  • rm -- '{}': supprime le fichier; la partie {} est l'endroit où le résultat de la recherche est remplacé par celui de la partie précédente. -- signifie que les paramètres de fin de commande évitent de générer une erreur pour les fichiers commençant par tiret .

Sinon, utilisez:

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

De homme trouve :

-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 méthode -exec.


Une autre et aussi commande plus rapide est en utilisant le terminateur + de exec au lieu de \; :

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

Cette commande exécute rmune seule fois à la fin au lieu de chaque fois qu'un fichier est trouvé et cette commande est presque aussi rapide que d'utiliser l'option -delete comme suit dans la version moderne findname__:

find /path/to/ -type f -mtime +7 -name '*.gz' -delete
119
αғsнιη

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. Puis extrayez 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 1 empêche find de parcourir les sous-répertoires ou d'effectuer une recherche dans l'ensemble du système si vous avez tapé /media/bkfolder /.

Les autres limites que j’ajoute sont des arguments de nom plus spécifiques tels que -name 'wncw*.gz', en ajoutant un plus récent que-temps -mtime -31 et en citant les 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 {} \;

2
zeke