В 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 следует использовать из родительской папки?
Ответы:
Если целевой каталог пуст, используйте поиск, фильтруйте только каталоги, фильтруйте по имени, выполняйте rmdir:
Если вы хотите рекурсивно удалить его содержимое, замените его
-exec rmdir {} \;
на-delete
или-prune -exec rm -rf {} \;
. Другие ответы включают в себя подробности об этих версиях, зачислить их тоже.источник
{} \;
делает?{}
может читаться как «для каждого соответствующего файла / папки», то есть заменяет каждый «найденный» файл / папку.\;
является терминатором для-exec
предложения.-prune
флаг к ответу в соответствии с предложением Дэвида Грейсона. Без этогоfind
все равно будет пытаться посетить отсутствующую папку и в конечном итоге завершится с кодом ошибки, который может, например, привести к сбою сборки Docker.Используйте find для имени «a» и выполните команду rm, чтобы удалить те, которые были названы в соответствии с вашими пожеланиями, следующим образом:
Сначала проверьте это с помощью ls для вывода списка:
Чтобы гарантировать удаление только каталогов, а не простых файлов, используйте аргумент "-type d" (как предлагается в комментариях):
"{}" - это подстановка для каждого найденного файла "a" - команда exec выполняется для каждого путем подстановки.
источник
1/2/a/3/4
, что может быть не предназначено, поэтому +1 за рекомендацию сначала проверить ...echo {}
чтобы проверить это сначала, вместоls {}
node_modules/
.find . -name a -type d -exec rm -rf {} \;
и это работало, хотя это распечаталоfind: ‘./subdir/subdir/a’: No such file or directory
для каждого удаленного каталога.Это также работает - он удалит все папки с именем "a" и их содержимое:
источник
find/rm
.find . -name a -exec rm -rf {} \;
, при попытке войти в этот каталог произойдет сбой поиска, что приведет к ошибке вродеfind: '1/2/3/a': No such file or directory
.illegal option --t
. Я должен был также передать каталог для поиска в ( stackoverflow.com/questions/25840713/... )rm -rf `find . -type d -name a`
.Чтобы удалить все каталоги с таким именем
foo
, запустите:В других ответах отсутствует важная вещь:
-prune
опция. Без него-prune
GNU find удалит каталог с совпадающим именем, а затем попытается вернуться в него, чтобы найти больше совпадающих каталогов. Параметр-prune
указывает ему не возвращаться в каталог, соответствующий условиям.источник
В итоге я решил удалить свои
node_modules
папки, прежде чем делать резервную копию моей работы, используяrsync
. Ключевым требованием является то, чтоnode_modules
папка может быть вложенной, поэтому вам нужна-prune
опция.Сначала я запустил это, чтобы визуально проверить папки, которые нужно удалить:
Затем я запустил это, чтобы удалить их все:
Благодаря фисташке
источник
sh #!/bin/bash echo "Found node_modules: "; find -type d -name node_modules -prune; read -r -p "Do you really want to delete all directories? [yes/no] " input; if [ ! $input != "yes" ]; then find -type d -name node_modules -prune -exec rm -rf {} \;; fi
Должен сделать свое дело. ВНИМАНИЕ, если вы случайно закачаете
.
или/
наxargs rm -Rf
весь компьютер, ваш компьютер будет удален без возможности вернуть его, что потребует переустановки ОС.источник
У меня было более 100 файлов, как
вышеуказанные ответы у меня не сработали
но следующая команда помогла мне.
я дал
-type
как.
так он удаляет как файлы, так и папки, который начинается сlog-
и
rm -rf
рекурсивно удаляет папки, даже если в нем есть файлы.если вы хотите только папки
одни файлы
источник
Комбинируя несколько ответов, вот команда, которая работает как в Linux, так и в MacOS
источник
Другой:
источник
-delete
не удаляет непустые папки.Эта команда работает для меня. Он выполняет свою работу рекурсивно
, - текущая папка
"node_modules" - имя папки
источник
найти путь / к / папкам / -maxdepth 1 -name "my_ *" -type d -delete
источник