Набросал только что "для внутренних нужд", но подумал: может ещё кому пригодится?
Shell
t:~$ cat ~/bin/rmemprydirs
#!/bin/bash
findemtpydirs() {
find "$1" -type d | while read i; do
[ -n "$(ls -A $i)" ] || echo "$i"
done
}
dir="$1"
[ -n "$dir" ] || dir=.
while findemtpydirs "$dir" | xargs rmdir 2>/dev/null; do :;done
Смысл, думаю, понятен из названия: удаление всех пустых каталогов, начиная от заданного (по умолчанию -- от текущего). Работает для любого уровня вложенности; т.е. при структуре вида
Код: Выделить всё
.
\--a
|--b
| |--c
| ...
| \--d
| \--1.htm
...
\--e
|--f
...
\--g
все каталоги кроме a, b и d будут удалены.
Known bug: Последний проход внешнего цикла всегда выдаёт сообщение "rmdir: пропущен операнд" (затем там и перенаправление stderr). Как красиво исправить -- не знаю, т.к., если загнать rmdir внутрь цикла, результат функции findemptydirs ему придётся передавать весь скопом в командной строке, а "это ведь не годится -- может не поместиться". Правда, особенно я об этом и не думал: работает -- и ладно. Но рекомендации приветствуются.