Для этого типа структуры dir:
/config/filegroups/filegroupA/files/fileA1.txt
/config/filegroups/filegroupA/files/fileA2.txt
/config/filegroups/filegroupB/files/fileB1.txt
/config/filegroups/filegroupB/files/fileB2.txt
...
Я знаю, что могу использовать rm -rf /config/filesgroups
для удаления родительской папки и всех подпапок ...
но я хочу , чтобы удалить только /filegroupA
, /filegroupB
и т.д., а не удалять/config/filegroups
rm -rf /config/filegroups/filegroups{A,B}
?bash
не включает '.' папки в пути расширения. Который может или не может быть желательным. Сам яshopt -s dotglob
в.bashrc
это исправить. Просто примечание, что кто-то может найти полезным;).rm -rf /*
будет делать;) --- серьезно не делай этогоОтветы:
Если вы хотите удалить только каталоги (и символические ссылки на каталоги), оставив все файлы без изменений
/config/filegroups
, вы можете использовать косую черту:Если вы хотите удалить каталоги с именами, начинающимися также с a
.
, если у вас довольно недавний bash, вам следует использовать опцию оболочки dotglob:источник
Это приведет к удалению всех файлов и каталогов, в
/config/filegroups
том числе «скрытых» файлов и каталогов (имена начинаются с.
).Если имена файлов или каталогов содержат пробелы, вы должны сделать это следующим образом:
Бонус: вы можете сначала проверить, что будет удалено следующим образом:
Если вы хотите сохранить определенные файлы или каталоги, вы можете сделать это следующим образом:
источник
find
«s-delete
варианта?-delete
отказывается удалять непустые каталоги.-maxdepth
переопределения-depth
, которые необходимы-delete
для удаления непустых каталогов. Без этого-maxdepth
вы не сможете легко увидеть, какие каталоги будут удалены, поскольку в нем также перечислены файлы внутри каталогов. Не использовать-maxdepth
также означает, что вы не можете легко использовать фильтры, как-name
. Кроме того,-delete
удаляет каталоги, удаляя сначала все объекты внутри, что может занять много времени, если это большое и глубокое дерево.Я предпочитаю использовать
find
с-exec
, это сделало бы ваш звонок примерно так:источник
Если вы уже в папке, вы можете просто набрать
rm -rf ./**
Так:
Это глобальный шаблон для удаления всех подпапок из локального пути.
./
ссылаясь на локальную папку ... и**
для всех папок ниже ..источник
rm -rf ./*
, за исключением того, что вы, скорее всего, получите диагностические сообщения о «Нет такого файла или каталога», если вы не используете-f
в своей команде (так как самый верхний каталог будет рекурсивно удален перед обработкой его содержимого). поrm
).