
Hallo weiss jemand wie man per Shellskript leere Verzeichnisse und Unterverzeichnisse löschen kann ? Ich habe bspw einen Verzeichnisbaum ähnlich: VERZ1 - -----VERZ2 -----VERZ3 - ---------VERZ4 VERZ5 - -----VERZ6 In einigen Verz. liegen Dateien, manche sind jedoch leer. Die leeren möchte ich per Skript löschen. Mittels ls -R kann ich mir den Baum ja anzeigen lassen, aber leider nur mit Dateien und nicht nur die Verzeichnisse. Zudem sind die Verzeichnisse meist inkl. Leer- und Sonderzeichen (Samba-Share!). Wie könnte man sowas eleganterweise machen ? Sollte aber wenn möglich ein Shellskript und kein Perl o.ä. sein. Danke schon mal. -- Regards, Jens Strohschnitter ------------------------------------- *!!!LINUX LINUX LINUX LINUX LINUX!!!* * http://www.jens-strohschnitter.de * ------------------------------------- Set the controls for the heart of the sun -------------------------------------

Wie könnte man sowas eleganterweise machen ? Sollte aber wenn möglich ein Shellskript und kein Perl o.ä. sein.
for verz in `find . -type d` do anzahl=`find "$verz" -maxdepth 1 -name "*" -not -name "."|wc -l` if [ $anzahl -le 1 ] then echo "$verz" fi done Wenn die Ausgabe gefällt, ersetze "echo" durch "rmdir". Grüße Dominik

Dominik Klein <dk@in-telegence.net> wrote:
for verz in `find . -type d` do anzahl=`find "$verz" -maxdepth 1 -name "*" -not -name "."|wc -l` if [ $anzahl -le 1 ] then echo "$verz" fi done
Wenn die Ausgabe gefällt, ersetze "echo" durch "rmdir".
Hi sieht an sich sehr gut aus. Bleibt nur das Problem mit den Leerzeichen. Wenn ich mich da dunkel entsinne geht das in der Bash nur mir einer while statt mit einer for-Schleife. Werde das Skript mal entsprechend durch eine while/do-Schleife ersetzen. Das müsste es dann gewesen sein. Vielen Dank. -- Regards, Jens Strohschnitter ------------------------------------- *!!!LINUX LINUX LINUX LINUX LINUX!!!* * http://www.jens-strohschnitter.de * ------------------------------------- Set the controls for the heart of the sun -------------------------------------

Jens Strohschnitter wrote:
Dominik Klein <dk@in-telegence.net> wrote:
for verz in `find . -type d` do anzahl=`find "$verz" -maxdepth 1 -name "*" -not -name "."|wc -l` if [ $anzahl -le 1 ] then echo "$verz" fi done
Wenn die Ausgabe gefällt, ersetze "echo" durch "rmdir".
Hi
sieht an sich sehr gut aus. Bleibt nur das Problem mit den Leerzeichen. Wenn ich mich da dunkel entsinne geht das in der Bash nur mir einer while statt mit einer for-Schleife. Werde das Skript mal entsprechend durch eine while/do-Schleife ersetzen. Das müsste es dann gewesen sein. Vielen Dank.
Am Anfang des Scriptes: OLDIFS=$IFS IFS=$'\n' Am Ende des Scriptes: IFS=$OLDIFS Ansonsten passe halt IFS auf deine Bedürfnisse an. Sandy -- Antworten bitte nur in die Mailingliste! PMs bitte an: news-reply2 (@) japantest (.) homelinux (.) com

Wie könnte man sowas eleganterweise machen ? Sollte aber wenn möglich ein Shellskript und kein Perl o.ä. sein.
Dominik Klein <dk@in-telegence.net> wrote:
for verz in `find . -type d` do anzahl=`find "$verz" -maxdepth 1 -name "*" -not -name "."|wc -l` if [ $anzahl -le 1 ] then echo "$verz" fi done
Wenn die Ausgabe gefällt, ersetze "echo" durch "rmdir".
Hi so, mittels while hat das Ganze super geklappt. Einzig unschöne ist noch, dass der "rmdir --ignore-fail-on-non-empty -p" die Meldung: rmdir: `.': Invalid argument ausgibt. Ist aber nur eine rein kosmetische Sache, ansonsten läuft es super! Danke. -- Regards, Jens Strohschnitter ------------------------------------- *!!!LINUX LINUX LINUX LINUX LINUX!!!* * http://www.jens-strohschnitter.de * ------------------------------------- Set the controls for the heart of the sun -------------------------------------

Hallo, Am Don, 28 Sep 2006, Jens Strohschnitter schrieb:
Dominik Klein <dk@in-telegence.net> wrote:
for verz in `find . -type d` do anzahl=`find "$verz" -maxdepth 1 -name "*" -not -name "."|wc -l` if [ $anzahl -le 1 ] then echo "$verz" fi done [..] so, mittels while hat das Ganze super geklappt. Einzig unschöne ist noch, dass der "rmdir --ignore-fail-on-non-empty -p" die Meldung:
rmdir: `.': Invalid argument
for verz in `find . -type d -mindepth 1`; do anzahl=`find "$verz" -mindepth 1 -maxdepth 1 | wc -l` Das "-name '*'" ist überflüssig. Noch einfacher und auch schneller ist aber: find . -mindepth 1 -type d -empty -print0 | xargs -r -0 rmdir HTH, HAND -dnh -- 136: Deadline Programmtod durch überhastete Weiterentwicklung eines falsch konstruierten Entwurfsmusters. (Lutz Donnerhacke)

Jens Strohschnitter schrieb:
Hallo
weiss jemand wie man per Shellskript leere Verzeichnisse und Unterverzeichnisse löschen kann ? Ich habe bspw einen Verzeichnisbaum ähnlich:
VERZ1 - -----VERZ2 -----VERZ3 - ---------VERZ4 VERZ5 - -----VERZ6
In einigen Verz. liegen Dateien, manche sind jedoch leer. Die leeren möchte ich per Skript löschen. Mittels ls -R kann ich mir den Baum ja anzeigen lassen, aber leider nur mit Dateien und nicht nur die Verzeichnisse. Zudem sind die Verzeichnisse meist inkl. Leer- und Sonderzeichen (Samba-Share!).
Wie könnte man sowas eleganterweise machen ? Sollte aber wenn möglich ein Shellskript und kein Perl o.ä. sein.
Danke schon mal.
Als Kommandozeilenaufruf: find dir -type d -exec rmdir -p {} \;
participants (6)
-
David Haller
-
Dominik Klein
-
Jens Strohschnitter
-
Sandy Drobic
-
Torsten Foertsch
-
Uwe Diederich