Supprimer les fichiers correspondants dans tous les sous-répertoires
Comment puis-je supprimer tous les fichiers .swp dans tous mes sous-répertoires sous Linux ?
Supprimez tous les fichiers *.swp sous le répertoire actuel, utilisez la commande find
sous l'une des formes suivantes :
find . -name \*.swp -type f -delete
L'option -delete
signifie que find supprimera directement les fichiers correspondants. C'est la meilleure correspondance à la question réelle de l'OP.
L'utilisation de -type f
signifie que la recherche ne traitera que les fichiers.
find . -name \*.swp -type f -exec rm -f {} \;
find . -name \*.swp -type f -exec rm -f {} +
L'option -exec
permet à find d'exécuter une commande arbitraire par fichier. La première variante exécutera la commande une fois par fichier, et la seconde exécutera le moins de commandes possible en remplaçant {}
par autant de paramètres que possible.
find . -name \*.swp -type f -print0 | xargs -0 rm -f
Le transfert de la sortie vers xargs
est utilisé pour des commandes par fichier plus complexes que celles possibles avec -exec
. L'option -print0
indique à find
de séparer les correspondances avec ASCII NULL au lieu d'un saut de ligne, et -0
indique à xargs
de s'attendre à une entrée séparée par NULL. Cela rend la construction du tube sûre pour les noms de fichiers contenant des espaces.
Voir man find
pour plus de détails et d'exemples.
Pour la recherche dans mon répertoire personnel (et en utilisant les fonctions GNU “find” et “xargs”), j'utiliserais :
find $HOME -name '*.swp' -print0 | xargs -0 rm -f
L'utilisation de “-print0
” et “-0
” signifie que les noms seront délimités par des caractères ASCII NUL ‘\0’, et cela permettra de gérer les chemins d'accès aux fichiers avec des espaces, etc. dans les noms. Si vous pensez avoir des répertoires (ou des fichiers de périphériques, ou des FIFO, ou d'autres fichiers) sous votre répertoire se terminant par “.swp”, vous pouvez ajouter l'option “-type f
” pour “find”. Si vous n'avez que des répertoires, la commande ci-dessus ne parviendra pas à les supprimer bruyamment.
Si vous souhaitez supprimer tous les fichiers de tous les sous-dossiers, vous pouvez utiliser la commande fournie,
$ find . -name \* -type f -delete