Как удалить папки с определенным именем
в 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 ответов:
если целевой каталог пуст, используйте 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)
я оказался здесь, чтобы удалить мой
node_modules
папки перед выполнением резервного копирования моей работы с помощьюrsync
. Ключевым требованием является то, чтоnode_modules
папка может быть вложенной, так что вам нужно .сначала я запустил это, чтобы визуально проверить папки, которые будут удалены:
find -type d -name node_modules -prune
затем я запустил это, чтобы удалить их все:
find -type d -name node_modules -prune -exec rm -rf {} \;
благодаря pistache