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