PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Shell: Script um Unterverzeichnisse zu leeren



yops
12.01.07, 09:54
Hallo zusammen, benötige eure Hilfe!

Ich möchte diverse Unterverzeichnisse (die immer gleich heißen) leeren - die Struktur ist wie folgt:

http://box99.de/tmp/linuxforen_folder_empty.gif

Leren möchte die Folder "folder_empty", die alle gleich heißen. Die übergeordneten Ordner heißen alle unterschiedlich (logisch ;)). Die eigentlich Ordnerstruktur geht noch tiefer (wollte ich euch ersparen), von daher wäre es sehr mühselig in jeden einzelnen Ordner zu wechseln.

Leeren kann ich übrigens auch nur mit "find -type f -print0 | xargs -0 rm", da die Verzeichnisse voll sind mit unzähligen Sessions (aufgrund einer buggy Software, die aber erst demnächst gefixt wird).

Habt ihr einen Tipp für mich?

Dnake und Gruß
Andreas

marce
12.01.07, 10:01
ungetestet aus dem Kopf

cd rootfolder
find . -type d -name folder_empty --exec rm {}/* ';'

... halt evtl. noch anpassen...

yops
12.01.07, 10:39
ungetestet aus dem Kopf

cd rootfolder
find . -type d -name folder_empty --exec rm {}/* ';'

... halt evtl. noch anpassen...
Vielen Dank erstmal für die schnelle Hilfe - so in etwa meinte ich das :)


Wenn ich den Befehl ausführe erhalte ich:
"rm: cannot remove `./1/empty/*': No such file or directory"
Der * wird leider nicht als Joker angesehen, sondern als Dateiname. Habe jetzt auch schon etliche Varianten mit Hochkomma, doppelten Anführungszeichen und Dateisuffix durch - leider will er das nicht.

Hast du dazu eine Idee?

Der Gestreifte
12.01.07, 13:03
Wenn Du eh nur leere Verzeichnisse löschen willst, kannst Du den Schalter "-empty" benutzen:
find /pfad -type d -empty -exec rmdir {} \;

marce
12.01.07, 13:05
klar will er nur leere Verzeichnisse haben - aber dummerweise auf die Art, dass _er_ sie leeren muss.

Also "knapp" an der Aufgabenstellung vorbei :-)

yops
12.01.07, 13:09
Wenn Du eh nur leere Verzeichnisse löschen willst, kannst Du den Schalter "-empty" benutzen:
find /pfad -type d -empty -exec rmdir {} \;
Nein nein - ich möchte die Verzeichnisse nur leeren, nicht löschen...

kreol
12.01.07, 13:34
Mal ganz hastig hingetippt ohne Test und ohne vorher mein Script-Buch befragt zu haben:
find / -type d -name folder_empty -exec cd {} \; for i in *; do rm $i; done;So oder so ähnlich... Evtl packst Du es nicht in eine Zeile sondern schreibst ein kurzes Script... Am besten Du lässt es mal durchlaufen mit "echo" statt "rm"...

Kann auch sein, das er damit nur das erste gefundene folder_empty leert. Spiel ggf. etwas damit rum, die Befehle hinter -exec sollten sich irgendwie auch zusammen fassen lassen...


Kreol

yops
12.01.07, 14:48
Mal ganz hastig hingetippt ohne Test und ohne vorher mein Script-Buch befragt zu haben:
find / -type d -name folder_empty -exec cd {} \; for i in *; do rm $i; done;So oder so ähnlich... Evtl packst Du es nicht in eine Zeile sondern schreibst ein kurzes Script... Am besten Du lässt es mal durchlaufen mit "echo" statt "rm"...

Kann auch sein, das er damit nur das erste gefundene folder_empty leert. Spiel ggf. etwas damit rum, die Befehle hinter -exec sollten sich irgendwie auch zusammen fassen lassen...


Kreol
Danke :) Du hast mich auf die richtige Bahn gebracht :) So funzt's:


for i in $(find . -type d -name folder_empty); do rm -f $i/*; done;

Vielen Dank nochmal!!!!!!!!!!!

403
15.01.07, 12:13
rm */folder_empty/*

sollte auch gehen.

marce
15.01.07, 12:40
lt. Beschreibung des TE nicht - wegen "zu vielen Dateien im VZ"...

403
15.01.07, 12:50
ja ok, irgendwann kommt natürlich: % /bin/rm ... argumentlist too long

yops
25.01.07, 13:27
Noch eine Ergänzung...

Da meine Verzeichnisse für rm viel zu viele Dateien enthalten haben, mußte ich das Ganze nochmal ein wenig abändern:


for i in $(find . -type d -name folder_empty); do find $i -type f -print0 | xargs -0 rm; done;