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

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

12 ответов

Решение

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

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

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

Используйте 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 выполняется для каждого путем подстановки.

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

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

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

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

find -type d -name node_modules -prune

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

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

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

Удалить все каталоги с именем foo, бежать:

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

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

Эта команда у меня работает. Он выполняет свою работу рекурсивно

find . -name "node_modules" -type d -prune -exec rm -rf '{}' +

. - текущая папка

"node_modules" - имя папки

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

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

Combining multiple answers, here's a command that works on both Linux and MacOS

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

У меня было более 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)

Более ранние комментарии у меня не работали, так как я искал выражение в имени папки в какой-то папке в структуре

Следующее работает для папки в такой структуре, как:

b/d/ab/cd/файл или c/d/e/f/a/f/файл

Для проверки перед использованием rm-rf

      find . -name *a* -type d -exec realpath {} \;

Рекурсивное удаление папок, включая содержимое

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

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

Другие вопросы по тегам