Dla każdego katalogu innego niż bieżący, możesz sprawdzić, czy jest pusty, próbując go rmdir
, ponieważ rmdir
gwarantuje niepowodzenie dla niepustych katalogów. Jeśli rmdir
się powiedzie, a chciałeś, aby pusty katalog przetrwał test, po prostu mkdir
go ponownie.
Nie używaj tej sztuczki, jeśli istnieją inne procesy, które mogłyby się zdezorientować, gdyby katalog, o którym wiedzą, na krótko przestał istnieć.
Jeśli rmdir
nie będzie dla ciebie działać, a możesz testować katalogi, które potencjalnie mogą zawierać dużą liczbę plików, każde rozwiązanie polegające na globalizacji powłoki może stać się powolne i/lub napotkać ograniczenia długości linii poleceń. Prawdopodobnie lepiej użyć find
w tym przypadku. Najszybsze rozwiązanie find
jakie przychodzi mi do głowy to
is_empty() {
test -z $(find "$1" -mindepth 1 -printf X -quit)
}
To działa dla wersji GNU i BSD find
, ale nie dla Solarisa, któremu brakuje każdego z tych operatorów find
. Kocham twoją pracę, Oracle.