web-dev-qa-db-fra.com

Comment supprimer des dossiers avec un certain nom

Sous Linux, comment puis-je supprimer des dossiers portant un certain nom et imbriqués au plus profond d'une hiérarchie de dossiers?

Les chemins suivants sont sous un dossier et je voudrais supprimer tous les dossiers nommés a.

1/2/3/a
1/2/3/b
10/20/30/a
10/20/30/b
100/200/300/a
100/200/300/b

Quelle commande Linux dois-je utiliser à partir du dossier parent?

109
Joe

Si le répertoire cible est vide, utilisez find, filtre avec uniquement les répertoires, filtre par nom, exécutez rmdir:

find -type d -name a -exec rmdir {} \;

Si vous souhaitez supprimer son contenu de manière récursive, remplacez -exec rmdir {} \; par -delete ou -Prune -exec rm -rf {} \;. D'autres réponses incluent des détails sur ces versions, à leur crédit aussi.

120
pistache

Utilisez find pour le nom "a" et exécutez rm pour supprimer ceux nommés selon vos souhaits, comme suit:

find . -name a -exec rm -rf {} \;

Testez-le d'abord en utilisant ls pour lister:

find . -name a -exec ls {} \;

Pour vous assurer que cela supprime uniquement les répertoires et non les fichiers ordinaires, utilisez l'argument "-type d" (comme suggéré dans les commentaires):

find . -name a -type d -exec rm -rf {} \;

Le "{}" est une substitution pour chaque fichier "a" trouvé - la commande exec est exécutée sur chacun d'eux par substitution.

135
wmorrison365

Cela fonctionne aussi - cela supprimera tous les dossiers appelés "a" et leur contenu:

rm -rf `find -type d -name a`
48
Arash Fotouhi

Pour supprimer tous les répertoires portant le nom foo, exécutez:

find -type d -name foo -a -Prune -exec rm -rf {} \;

Les autres réponses manquent une chose importante: le -Prune option. Sans pour autant -Prune, GNU find supprimera le répertoire avec le nom correspondant, puis essaiera d'y retourner pour trouver plus de répertoires correspondants. Le -Prune Option lui dit de ne pas recurse dans un répertoire correspondant aux conditions.

21
David Grayson

J'ai fini ici par chercher à supprimer mes dossiers node_modules Avant de faire une sauvegarde de mon travail en cours à l'aide de rsync. Une condition essentielle est que le dossier node_modules Puisse être imbriqué, vous avez donc besoin de l'option -Prune.

J'ai d'abord exécuté ceci pour vérifier visuellement les dossiers à supprimer:

find -type d -name node_modules -Prune

Ensuite, j'ai lancé ceci pour les supprimer tous:

find -type d -name node_modules -Prune -exec rm -rf {} \;

Merci à pistache

12
ewok2030
find ./ -name "FOLDERNAME" | xargs rm -Rf

Devrait faire l'affaire. ATTENTION, si vous pompez accidentellement un . ou / en xargs rm -Rf tout votre ordinateur sera supprimé sans possibilité de le récupérer, nécessitant une réinstallation du système d'exploitation.

11
Slevin

J'ai eu plus de 100 fichiers comme

log-12
log-123
log-34
....

les réponses ci-dessus n'ont pas fonctionné pour moi

mais la commande suivante m'a aidé.

find . -name "log-*" -exec rm  -rf {} \;

j'ai donné -type comme . donc il supprime les fichiers et les dossiers qui commence par log-

et rm -rf supprime les dossiers de manière récursive même s'il contient des fichiers.

si vous voulez des dossiers seuls

find -type d -name "log-*" -exec rm  -rf {} \;

fichiers seuls

find -type f -name "log-*" -exec rm  -rf {} \;
9
Thamaraiselvam

Un autre:

"-exec rm -rf {} \;" can be replaced by "-delete"

find -type d -name __pycache__ -delete      # GNU find
find . -type d -name __pycache__ -delete    # POSIX find (e.g. Mac OS X)
7
dgrigonis

En combinant plusieurs réponses, voici une commande qui fonctionne à la fois sous Linux et MacOS.

rm -rf $(find . -type d -name __pycache__)
1
marcosfede