Назад | Перейти на главную страницу

Поиск / удаление папок верхнего уровня, не содержащих файлов

Я хочу удалить каталог верхнего уровня, который не содержит файлов, но может содержать другие пустые (то есть снова не содержащие файлов) каталоги. Например:

$ ls -R
.: foo/
./foo/: bar  bar1
./foo/bar/:
./foo/bar1/:

Здесь я хочу удалить каталог foo/ (и его подкаталоги). Сначала я подумал об использовании чего-то вроде find . -type d -empty для поиска, но поскольку foo содержит каталоги, он находит только каталоги нижнего уровня:

$ find . -type d -empty
./foo/bar
./foo/bar1

Думаю, я мог бы зацикливаться, пока find . -type d -empty ничего не находит, но у меня может получиться очень большая структура каталогов, содержащая множество этих пустых каталогов, и меня беспокоит влияние на производительность такого подхода ...

Любая идея?

find . -depth -type d -empty должен сделать свое дело. -depth заставит find обрабатывать содержимое каталога до самого каталога.

Редактировать:

Предположительно вы использовали бы что-то вроде -delete в конце этой находки, иначе у вас была бы та же проблема, которую вы описали. Также стоит отметить, -delete на самом деле подразумевает -depthтак действительно, придерживаясь find . -type d -empty -delete даст вам то, что вы ищете, за один проход; предполагая, что у вас нет проблем с удалением любых других пустых каталогов нижнего уровня, с которыми вы также столкнетесь.