Comme dans les réponses précédentes (+1 pour les deux), l'astuce consiste à utiliser un -type f
prédicat.
Notez qu'au lieu de cela, -exec rm '{}'
vous pouvez également utiliser le -delete
prédicat. Mais ne fais pas ça. Avec -exec rm '{}'
vous, vous pouvez (et devriez) d’abord -exec echo rm '{}'
vérifier que c’est vraiment ce que vous voulez. Après cela, relancez la commande sans le echo
.
L'utilisation -delete
est plus rapide (pas de fichier supplémentaire fork()
et execve()
pour chaque fichier), mais cela est risqué car cela -delete
fonctionne aussi comme condition, donc:
# delete *.tmp files
find . -type f -name '*.tmp' -delete
mais si vous échangez SEULEMENT les arguments:
# delete ALL files
find . -type f -name '*.tmp' -delete
Si vous avez besoin de travailler avec des tonnes de fichiers plus rapidement find
et rm
plus rapidement, consultez l' find ... | xargs ... rm
idiome UNIX.
find /path/to/files* -type f -mtime +10
et de voir ce qu’il produirait.-exec
, voyez ce qu'il trouve en premier.-delete
argument tofind
, qui supprime tous les fichiers et dossiers, ce dernier uniquement s'il est vide. Cela implique-depth
, c'est-à-dire une recherche en profondeur d'abord.-mindepth 1
pour exclure le répertoire parent.