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