Как удалить только каталоги и оставить файлы нетронутыми - PullRequest
47 голосов
/ 10 мая 2011

У меня есть сотни каталогов и файлов в одном каталоге.

Каков наилучший способ удаления только каталогов (независимо от того, есть в них каталоги или нет, просто удалите их все)

В настоящее время я использую ls -1 -d */, записываю их в файл, делаю sed, а затем запускаю его.Это довольно долгий путь.Я ищу лучший способ удаления только каталогов

Ответы [ 4 ]

155 голосов
/ 12 июля 2011

Это намного проще и работает для меня:

rm -r */
17 голосов
/ 14 апреля 2016

find . -maxdepth 1 -mindepth 1 -type d

затем

find . -maxdepth 1 -mindepth 1 -type d -exec rm -rf '{}' \;

Чтобы добавить объяснение:

find начинается в текущем каталоге из-за . и остается в текущем каталоге только с -maxdepth и -mindepth, оба установлены на 1.-type d предписывает find сопоставлять только те элементы, которые являются каталогами.

find также имеет флаг -exec, который может передавать свои результаты другой функции, в данном случае rm.'{}' \; - это способ передачи этих результатов. См. Этот ответ для более полного объяснения того, что {} и \; делают

11 голосов
/ 10 мая 2011

Сначала запустите:

find /path -d -type d

, чтобы убедиться, что вывод выглядит нормальным, затем:

find /path -d -type d -exec rm -rf '{}' \;

-type d ищет только каталоги, затем -d удостоверится, чтопоместите дочерние каталоги перед родителем.

0 голосов
/ 10 мая 2011

В одну строку:

rm -R `ls -1 -d */`

(обратные кавычки)

...