Как удалить вложенные пустые каталоги с помощью скрипта Bash в Linux?
Я хочу иметь возможность запустить скрипт, который удалит все мои пустые каталоги. Проблема в том, что некоторые из них являются вложенными, то есть каталогами, в которых есть только пустые каталоги, поэтому сценарий должен быть рекурсивным.
Я знаю это:
find /media/server/data001/Unprotected/Downloads/ -type d -empty -exec rmdir {} \;
но я понятия не имею, как заставить его работать снова и снова, пока все вложенные каталоги не будут обработаны и затем остановлены.
1 ответ
Что вам нужно, так это обход в глубину. При этом вы начинаете с самого глубокого каталога, а затем двигаетесь вверх. find
есть опция для этого, так что вы можете просто запустить:
find /some/path -depth -type d -exec rmdir {} \;
Возможно, вы захотите дополнительно отключить предупреждения для непустых каталогов. Можете добавить 2>/dev/null
в конце для этого.
С GNU find
(и другие, как BSD find
на OS X), вы можете оптимизировать команду - и запустить ее без предупреждений - используя -empty
, как вы сделали выше.
find /some/path -depth -type d -empty -exec rmdir {} \;