105 votes

Supprimer les fichiers correspondants dans tous les sous-répertoires

Comment puis-je supprimer tous les fichiers .swp de tous mes sous-répertoires sous Linux ?

183voto

Rob Allen Points 7768

Pour supprimer tous les fichiers *.swp se trouvant sous le répertoire actuel, utilisez la fonction find dans l'une des formes suivantes :

  • find . -name \*.swp -type f -delete

    El -delete l'option signifie que find va directement supprimer les fichiers correspondants. C'est ce qui correspond le mieux à la question de l'OP.

    Utilisation de -type f signifie que find ne traitera que les fichiers.

  • find . -name \*.swp -type f -exec rm -f {} \;
    find . -name \*.swp -type f -exec rm -f {} +

    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 {} avec le plus grand nombre de paramètres possible.

  • find . -name \*.swp -type f -print0 | xargs -0 rm -f

    Transférer la sortie vers xargs est utilisé pour des commandes par fichier plus complexes que ce qui est possible avec -exec . L'option -print0 dit à find pour séparer les correspondances avec ASCII NULL au lieu d'une nouvelle ligne, et -0 dit à xargs pour s'attendre à une entrée séparée par NULL. Cela rend la construction pipe sûre pour les noms de fichiers contenant des espaces.

参照 man find pour plus de détails et d'exemples.

23voto

Zeograd Points 331

find . -name '*.swp' -delete

Le fait que find effectue la suppression lui-même élimine tout risque d'espace incorporé dans le nom du fichier, ... Pour plus de sécurité, vous pouvez également ajouter -type f pour les fichiers uniquement.

7voto

user31894 Points 2591
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

2voto

Randy6T9 Points 1606

Pour effectuer une recherche dans mon répertoire personnel (et utiliser les outils 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 NULs ASCII '. \0 Cela permet de gérer les chemins d'accès aux fichiers dont les noms contiennent des blancs, etc. Si vous pensez avoir des répertoires (ou des fichiers de périphérique, ou des FIFO, ou d'autres fichiers) sous votre répertoire se terminant par '.swp', vous pouvez ajouter le caractère ' -type f à l'option "trouver". Si vous n'avez que des répertoires, la commande ci-dessus ne parviendra pas à les supprimer bruyamment.

0voto

Heisenberg Points 427

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

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X