Retirer des fichiers de plus de 7 jours

47

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?

    
posée Malihe Pakyari 24.02.2015 - 10:22
la source

1 réponse

84

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

La commande fixe serait donc:

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

Explication:

  • find : la commande unix pour rechercher les f iles / d irectories / l encres et autres.
  • /path/to/ : le répertoire dans lequel commencer votre recherche.
  • -type f : recherche uniquement les fichiers.
  • -name '*.gz' : liste les fichiers qui se terminent par .gz .
  • -mtime +7 : ne considère que ceux dont la date de modification est antérieure à 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 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 trait d'union .

Alternativement, utilisez:

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

De man find :

-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 commande plus rapide est utilisant le terminateur + de exec au lieu de \; :

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

Cette commande exécutera rm une seule fois à la fin au lieu de chaque fois qu'un fichier est trouvé et que cette commande est presque aussi rapide que l'option -delete comme suit dans le fichier find :

find /path/to/ -type f -mtime +7 -name '*.gz' -delete
    
réponse donnée αғsнιη 24.02.2015 - 11:14
la source

Lire d'autres questions sur les étiquettes