Für jedes beliebige Verzeichnis außer dem aktuellen können Sie prüfen, ob es leer ist, indem Sie versuchen, es mit rmdir
zu belegen, denn rmdir
schlägt bei nicht leeren Verzeichnissen garantiert fehl. Wenn rmdir
erfolgreich ist und Sie eigentlich wollten, dass das leere Verzeichnis den Test überlebt, führen Sie einfach erneut mkdir
aus.
Verwenden Sie diesen Hack nicht, wenn es andere Prozesse gibt, die durch ein Verzeichnis, von dem sie wissen, dass es kurzzeitig nicht mehr existiert, verwirrt werden könnten.
Wenn rmdir
für Sie nicht funktioniert und Sie Verzeichnisse testen, die möglicherweise eine große Anzahl von Dateien enthalten, könnte jede Lösung, die auf Shell-Globbing beruht, langsam werden und/oder an die Grenzen der Befehlszeilenlänge stoßen. Wahrscheinlich ist es in diesem Fall besser, find
zu verwenden. Die schnellste find
-Lösung, die mir einfällt, geht so:
is_empty() {
test -z $(find "$1" -mindepth 1 -printf X -quit)
}
Das funktioniert für die GNU- und BSD-Versionen von find
, aber nicht für die Solaris-Version, der jeder einzelne dieser find
-Operatoren fehlt. Ich liebe deine Arbeit, Oracle.