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?
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.
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.
Cela fonctionne aussi - cela supprimera tous les dossiers appelés "a" et leur contenu:
rm -rf `find -type d -name a`
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.
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
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.
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 {} \;
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)
En combinant plusieurs réponses, voici une commande qui fonctionne à la fois sous Linux et MacOS.
rm -rf $(find . -type d -name __pycache__)