Я хочу удалить каталог верхнего уровня, который не содержит файлов, но может содержать другие пустые (то есть снова не содержащие файлов) каталоги. Например:
$ 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
даст вам то, что вы ищете, за один проход; предполагая, что у вас нет проблем с удалением любых других пустых каталогов нижнего уровня, с которыми вы также столкнетесь.