Как удалить папки с определенным именем
В 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 следует использовать из родительской папки?
Ответы
Ответ 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