2010-02-22 13:58:05 +0000 2010-02-22 13:58:05 +0000
84
84

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 ?

Réponses (5)

147
147
147
2010-02-22 13:59:15 +0000

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.

16
16
16
2010-02-22 14:07:23 +0000

find . -name '*.swp' -delete

Le fait de trouver la suppression elle-même supprime tout risque d'espace dans le nom du fichier, … Pour plus de sécurité, pensez aussi à ajouter -type f pour les fichiers uniquement.

4
4
4
2010-02-22 14:11:50 +0000
find /path -type f -name "*.swp" -delete
find /path -type f -name "*.swp" -exec rm -f "{}" +;

bash 4.0

shopt -s globstar
rm -f /path/**/*.swp
2
2
2
2010-02-22 14:04:52 +0000

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.

0
0
0
2019-11-17 04:04:10 +0000

Si vous souhaitez supprimer tous les fichiers de tous les sous-dossiers, vous pouvez utiliser la commande fournie,

$ find . -name \* -type f -delete