Подтвердить что ты не робот

Как удалить папки с определенным именем

В Linux, как мне удалить папки с определенным именем, которые глубоко вложены в иерархию папок?

Следующие пути находятся под папкой, и я хотел бы удалить все папки с именем 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

Какую команду Linux следует использовать из родительской папки?

4b9b3361

Ответ 1

Если целевой каталог пуст, воспользуйтесь поиском, фильтром только с каталогами, фильтром по имени, выполните команду rmdir:

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

Если вы хотите рекурсивно удалить его содержимое, замените -exec rmdir {} \; на -delete или -prune -exec rm -rf {} \;. Другие ответы включают в себя подробные сведения об этих версиях, кредит тоже.

Ответ 2

Используйте find для имени "a" и выполните команду rm, чтобы удалить имена, указанные в соответствии с вашими пожеланиями, следующим образом:

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

Сначала проверьте его, используя ls для списка:

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

Чтобы это только удаляло каталоги, а не простые файлы, используйте аргумент "-type d" (как указано в комментариях):

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

"{}" является подстановкой для каждого найденного файла "a" - команда exec выполняется для каждого путем подстановки.

Ответ 3

Это также работает - он удалит все папки под названием "a" и их содержимое:

rm -rf `find -type d -name a`

Ответ 4

Чтобы удалить все каталоги с именем foo, запустите:

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

В других ответах отсутствует важная вещь: опция -prune. Без -prune поиск GNU удалит каталог с совпадающим именем, а затем попробует повторить его, чтобы найти больше каталогов, которые соответствуют. Опция -prune указывает, чтобы она не возвращалась в каталог, соответствующий условиям.

Ответ 5

В итоге я решил удалить свои папки node_modules, прежде чем делать резервную копию моей работы, используя rsync. Ключевое требование заключается в том, что папка node_modules может быть вложенной, поэтому вам нужна опция -prune.

Сначала я запустил это для визуальной проверки папок, которые нужно удалить:

find -type d -name node_modules -prune

Затем я запустил это, чтобы удалить их всех:

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

Благодаря фисташке

Ответ 6

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

Должен сделать трюк. ПРЕДУПРЕЖДЕНИЕ, если вы случайно загрузили . или / в xargs rm -Rf, весь ваш компьютер будет удален без возможности его возврата, требуя переустановки ОС.

Ответ 7

У меня было более 100 файлов, таких как

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

вышеуказанные ответы не спомогли мне

но следующая команда помогла мне.

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

я дал -type как ., поэтому он удаляет как файлы, так и папки, начиная с log-

rm -rf рекурсивно удаляет папки, даже если у них есть файлы.

если вы хотите, чтобы папки были одни

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

одни файлы

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

Ответ 8

Другой:

"-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)

Ответ 9

Комбинируя несколько ответов, здесь команда, которая работает как в Linux, так и в MacOS

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

Ответ 10

найти путь/в/the/folders -maxdepth 1-name "my_ *" -type d -delete