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


в 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 я должен использовать из родительской папки?

9 72

9 ответов:

если целевой каталог пуст, используйте find, filter with only Directory, filter by name, execute rmdir:

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

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

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

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

сначала протестируйте его с помощью ls to list:

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

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

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

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

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

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

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

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

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

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

должен сделать трюк. Внимание, если вы случайно качаете a . или / на xargs rm -Rf весь ваш компьютер будет удален без возможности получить его обратно, требуя переустановки ОС.

у меня было более 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 {} \;

другой:

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

найти путь/к / в / папки-maxdepth 1-имя "my_*" - тип d-delete

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

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

find -type d -name node_modules -prune

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

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

благодаря pistache