Для любого каталога, кроме текущего, вы можете проверить, является ли он пустым, попытавшись сделать rmdir
это, потому что rmdir
гарантированно произойдет сбой для непустых каталогов. Если все rmdir
получилось, и вы действительно хотели, чтобы пустой каталог выдержал тест, просто mkdir
снова.
Не используйте этот хак, если есть другие процессы, которые могут стать некомпетентными из-за каталога, который, как они знают, ненадолго прекратит свое существование.
Если у rmdir
вас не получится, и вы можете тестировать каталоги, которые могут содержать большое количество файлов, любое решение, основанное на глобализации оболочки, может работать медленно и / или работать с ограничениями длины командной строки. Вероятно, лучше использовать find
в этом случае. Самое быстрое find
решение, которое я могу придумать, выглядит как
is_empty() {
test -z $(find "$1" -mindepth 1 -printf X -quit)
}
Это работает для версий GNU и BSD, find
но не для версий Solaris, в которой отсутствует каждый из этих find
операторов. Люблю свою работу, Оракул.