Hallo zusammen,
ich bin auf eine Verhalten gestoßen, welches ich mir nicht erklären kann.
Es geht um folgendes: In einem Verzeichnis X befinden sich diverse Unterverzeichnisse. Diese Unterverzeichnisse können entweder leer sein, oder sie enthalten Dateien (versteckte und nicht versteckte Dateien).
Die Aufgabe: Ein Script soll die Verzeichnisse löschen, wenn sie leer sind.
Mein Ansatz:
mkdir /tmp/test mkdir /tmp/test/leer mkdir /tmp/test/nicht_leer echo "123" > /tmp/test/nicht_leer/datei
Anschließend habe ich mir ein bash-Script erstellt:
1 2 3 4 5 6 7 8 9 10 | find /tmp/test -mindepth 1 -type d | while read VERZ do VORHANDEN=$(find "$VERZ" -maxdepth 0 -empty) if [ -n $VORHANDEN ] then echo "Verzeichnis \"$VERZ\" ist leer" else echo "Verzeichnis \"$VERZ\" ist nicht leer" fi done |
Als Ergebnis erhalte ich jedoch:
Verzeichnis "/tmp/test/nicht_leer" ist leer Verzeichnis "/tmp/test/leer" ist leer
Mittlerweile habe ich herausgefunden, dass der test
-Befehl in Zeile 4 das Problem verursacht: Ich habe das Script wie folgt angepasst:
1 2 3 4 5 6 7 8 9 10 | find /tmp/test -mindepth 1 -type d | while read VERZ do VORHANDEN=$(find "$VERZ" -maxdepth 0 -empty) if [ -n "$VORHANDEN" ] then echo "Verzeichnis \"$VERZ\" ist leer" else echo "Verzeichnis \"$VERZ\" ist nicht leer" fi done |
Dann funktioniert das auch:
Verzeichnis "/tmp/test/nicht_leer" ist nicht leer Verzeichnis "/tmp/test/leer" ist leer
Aber warum ist das so? Die Verzeichnisnamen enthalten keine Leerzeichen... Ich dachte immer, dass die Anführungszeichen nur dann eingesetzt werden müssen, wenn Leerzeichen in einem String enthalten sind.
Im Voraus herzlichen Dank!
Liebe Grüße,
frechdachs