Archiv verlassen und diese Seite im Standarddesign anzeigen : Shell: Script um Unterverzeichnisse zu leeren
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
ungetestet aus dem Kopf
cd rootfolder
find . -type d -name folder_empty --exec rm {}/* ';'
... halt evtl. noch anpassen...
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 {} \;
klar will er nur leere Verzeichnisse haben - aber dummerweise auf die Art, dass _er_ sie leeren muss.
Also "knapp" an der Aufgabenstellung vorbei :-)
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...
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
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!!!!!!!!!!!
rm */folder_empty/*
sollte auch gehen.
lt. Beschreibung des TE nicht - wegen "zu vielen Dateien im VZ"...
ja ok, irgendwann kommt natürlich: % /bin/rm ... argumentlist too long
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;
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.