type
option de filtrage des résultats
find
accepte le type
option pour sélectionner, par exemple, uniquement les fichiers.
find /path/to/files -type f -mtime +10 -delete
Omettre -delete
pour montrer ce qu'il supprimerait, et une fois que vous avez vérifié cela, continuez et exécutez la commande complète.
Cela ne fonctionnerait que sur des fichiers, pas sur des répertoires. Utilisez -type d
à l'inverse, lister uniquement les répertoires qui correspondent à vos arguments.
Options supplémentaires
Vous voudrez peut-être lire man find
, car il existe d'autres options dont vous pourriez avoir besoin à l'avenir. Par exemple, -maxdepth
vous permettrait de limiter uniquement les éléments trouvés à une profondeur spécifique, par ex. -maxdepth 0
ne récurrait pas dans les sous-répertoires.
Quelques remarques
-
Je me demande comment la commande aurait supprimé un dossier, car vous ne pouvez pas supprimer un dossier avec
rm
seulement. Vous auriez besoin derm -r
pour ça. -
Aussi,
/path/to/files*
prête à confusion. Vouliez-vous dire/path/to/files/
ou vous attendez-vous à ce que le caractère générique s'étende à plusieurs noms de fichiers et de dossiers ? -
Mettez le
{}
entre guillemets simples, c'est-à-dire'{}'
pour éviter que le nom de fichier/répertoire substitué ne soit interprété par le shell, tout comme nous protégeons le point-virgule avec une barre oblique inverse.
Comme dans les réponses précédentes (+1 pour les deux), l'astuce consiste à utiliser -type f
prédicat.
Notez qu'au lieu de -exec rm '{}'
vous pouvez également utiliser -delete
prédicat. Mais ne fais pas ça. Avec -exec rm '{}'
vous pouvez (et devriez) d'abord faire -exec echo rm '{}'
pour vérifier que c'est vraiment ce que vous voulez. Après cela, relancez la commande sans le echo
.
Utilisation de -delete
est plus rapide (pas de fork()
supplémentaire et execve()
pour chaque fichier), mais c'est risqué car -delete
fonctionne aussi comme condition, donc :
# delete *.tmp files
find . -type f -name '*.tmp' -delete
mais si vous échangez UNIQUEMENT les arguments :
# delete ALL files
find . -type f -name '*.tmp' -delete
Si jamais vous avez besoin de find
et rm
pour travailler plus rapidement sur des tonnes de fichiers, consultez le find ... | xargs ... rm
Expression UNIX.