Как удалить вложенные пустые каталоги с помощью скрипта 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 {} \;
Другие вопросы по тегам