Pour faire suite à la réponse de mouviciel, vous pourriez aussi faire cela comme une boucle for, au lieu d'utiliser xargs. Je trouve souvent xargs encombrant, surtout si je dois faire quelque chose de plus compliqué à chaque itération.
for f in $(find /tmp -name '*.pdf' -or -name '*.doc'); do rm $f; done
Comme un certain nombre de personnes l'ont fait remarquer, cela échouera s'il y a des espaces dans les noms de fichiers. Vous pouvez contourner ce problème en définissant temporairement l'IFS (séparateur de champ interne) sur le caractère de nouvelle ligne. L'opération échoue également en présence de caractères génériques. \[?*
dans les noms de fichiers. Vous pouvez contourner ce problème en désactivant temporairement l'expansion des caractères génériques (globbing).
IFS=$'\n'; set -f
for f in $(find /tmp -name '*.pdf' -or -name '*.doc'); do rm "$f"; done
unset IFS; set +f
Si vous avez des retours à la ligne dans vos noms de fichiers, cela ne fonctionnera pas non plus. Il est préférable d'utiliser une solution basée sur xargs :
find /tmp \( -name '*.pdf' -or -name '*.doc' \) -print0 | xargs -0 rm
(Les parenthèses échappées sont nécessaires ici pour que l'option -print0
s'appliquent à la fois or
clauses).
GNU et *BSD find possède également une fonction -delete
qui ressemblerait à ceci :
find /tmp \( -name '*.pdf' -or -name '*.doc' \) -delete
97 votes
Je sais que ce n'est pas bien d'exécuter du code sans le comprendre, mais beaucoup de gens viennent sur ce site pour apprendre le scripting bash. Je suis arrivé ici en googlant "bash scripting files recursively", et presque J'ai exécuté une de ces réponses (juste pour tester la récursivité) sans réaliser qu'elle supprimerait des fichiers. Je sais
rm
fait partie du code de l'OP, mais il n'est pas vraiment pertinent pour la question posée. Je pense qu'il serait plus sûr que les réponses soient formulées en utilisant une commande inoffensive telle queecho
.0 votes
Question similaire ici : stackoverflow.com/questions/41799938/
1 votes
@Keith a eu une expérience similaire, complètement d'accord et a changé le titre.
0 votes
Avertissement pour les noobs comme moi, qui perdent des heures : Dans la plupart des réponses, vous devez changer où il est écrit "/tmp/" le répertoire que vous voulez faire, exemple : "/home/mon dossier".