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?
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?
Réponses:
Comme @Jos l'a souligné, vous avez manqué un espace entre name
et '*.gz'
; aussi pour accélérer l'utilisation de commandes -type f
option 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 -- '{}' \;
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 .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 -exec
mé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 rm
qu'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' -delete
option suivante find
:
find /path/to/ -type f -mtime +7 -name '*.gz' -delete
-delete
à la fin? Pourquoi jouer avec le +
ou \;
?
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 1
empê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 -31
et 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 {} \;
name
et'*.gz'
.