Ответ 1
В одной строке:
rm -R `ls -1 -d */`
(обратные кавычки)
У меня есть сотни каталогов и файлов в одном каталоге.
Каков наилучший способ удаления только каталогов (независимо от того, есть ли в них каталоги или нет, просто удалите их все)
В настоящее время я использую ls -1 -d */
, записываю их в файл и делаю sed
, а затем запускаю его. Это довольно длинный путь. Я ищу лучший способ удаления только каталогов
В одной строке:
rm -R `ls -1 -d */`
(обратные кавычки)
Это намного проще и работает для меня:
rm -r */
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
. '{}' \;
это способ передачи этих результатов. Смотрите этот ответ для более полного объяснения того, что {}
и \;
делать
Сначала запустите:
find /path -d -type d
чтобы убедиться, что результат выглядит нормальным, а затем:
find /path -d -type d -exec rm -rf '{}' \;
-type d
выглядит только для каталогов, тогда -d
обязательно помещает дочерние каталоги перед родителем.
Простой способ: -
rm -rf 'ls -d */'