web-dev-qa-db-fra.com

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?

67
Alex

Supprimez tous les fichiers * .swp situés sous le répertoire en cours, 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 avec la question réelle de OP.

    Utiliser -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 {} +

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

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

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

Voir man find pour plus de détails et d’exemples.

126
Lachlan Roche

find . -name '*.swp' -delete

Si find a été supprimé, supprimez lui-même tous les risques liés à l’espace inséré dans le nom du fichier, ... Pour une sécurité accrue, envisagez également d’ajouter -type f aux fichiers uniquement.

16
Zeograd
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
3
user31894

Pour effectuer une recherche dans mon répertoire personnel (et utiliser 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', ce qui gérera les chemins d'accès aux fichiers avec des blancs, etc. Si vous pensez que votre répertoire contient des répertoires (ou des fichiers de périphérique, des fichiers FIFO ou autres) se terminant par «.swp», vous pouvez ajouter l'option «-type f» à «rechercher». Si vous ne disposez que de répertoires, la commande ci-dessus ne parvient pas à les supprimer bruyamment.

2
Jonathan Leffler