Hallo zusammen, Ich versuche gerade ein Skript zu schreiben, welches mir etwas Platz auf der Platte bescheren soll. Dazu möchte ich in einem Verzeichnis alle Unterverzeichnisse bis auf drei bestimmte löschen. Leider fehlt mir dazu die Idee wie ich das anstellen könnte. Ein rm --exclude (was meinem Ziel gerecht würde) gibt es nicht. Für einen Hinweis wäre ich dankbar. Viele Grüße Andreas -- "Das Telefon hat zu viele ernsthaft zu bedenkende Mängel für ein Kommunikationsmittel. Das Gerät ist von Natur aus von keinem Wert für uns." (Western Union, Interne Mitteilung, 1876)
Einfach die 3 Verzeichnisse vorher wo anders sichern, alles löschen, Verzeichnisse einstpielen? Ist einfach aber wirksam. Maximilian Steinbauer
Andreas Hergesell wrote:
Dazu möchte ich in einem Verzeichnis alle Unterverzeichnisse bis auf drei bestimmte löschen.
Leider fehlt mir dazu die Idee wie ich das anstellen könnte. Ein rm --exclude (was meinem Ziel gerecht würde) gibt es nicht. man find Wenn Du das auch mit Regulären Ausdrücken hinbekommen kannst gibt es find -delete
Ciao Jochen -- Wissenswertes rund um Linux/FreeBSD und Samba: http://www.informatik-archiv.de
Hi Jochen, Am Donnerstag, 12. August 2004 12:56 schrieb Jochen Schrader:
Andreas Hergesell wrote:
Dazu möchte ich in einem Verzeichnis alle Unterverzeichnisse bis auf drei bestimmte löschen.
Leider fehlt mir dazu die Idee wie ich das anstellen könnte. Ein rm --exclude (was meinem Ziel gerecht würde) gibt es nicht.
man find Wenn Du das auch mit Regulären Ausdrücken hinbekommen kannst gibt es find -delete
Tada, :-) Reguläre Ausdrücke. Naja, leider muss ich mich in dieses Thema noch komplett einarbeiten. Vielleicht kann mir ein befreundeter Informatiker bei einem Bier die RegEx näherbringen :-) Du denkst also an ein Konstrukt ala "find bla bla | rm bla bla" Korrekt?
Ciao Jochen
Danke für den Hinweis! Andreas -- Wußten Sie das 85 % aller Statistiken falsch sind?
Andreas Hergesell wrote: > Am Donnerstag, 12. August 2004 12:56 schrieb Jochen Schrader: >>Andreas Hergesell wrote: >>>Leider fehlt mir dazu die Idee wie ich das anstellen könnte. >>>Ein rm --exclude (was meinem Ziel gerecht würde) gibt es nicht. >>man find >>Wenn Du das auch mit Regulären Ausdrücken hinbekommen kannst gibt >>es find -delete > Du denkst also an ein Konstrukt ala "find bla bla | rm bla bla" > Korrekt? Nicht ganz! 1. kann find das Löschen von leeren Verzeichnissen und Dateien (-delete) schon selbst erledigen, 2. klappt das mit der Pipe nicht, 3. wenn man -delete nicht verwenden möchte/kann, kann man mittels -exec u. xargs oder so etwas die Dateinamen an rm weiter reichen. Ein Beispiel: Verzeichnisse user01 user02 user03 spezialuser01 stehen bleiben soll spezialuser01, wir befinden uns im Arbeitsverzeichnis, (d. h. ./user01 ...) Also, angenommen die obigen Verzeichnisse sind Verzeichnisse mit weiterem Inhalt, dann klappt: find -x . -maxdepth 1 -not -name "spezial*" -print0 | xargs -0 rm -rf find erlaubt Dir mehr Möglichkeiten der detailierten Suche. Alles hängt davon ab, ob Du Deine Verzeichnisse in irgend ein Muster quetschen kannst. Das können auch Erstellungszeiten oder Permissions sein. Eine andere Lösungsmöglichkeit ist dann das ganze über ein Skript zu machen. Das Skript müsste den Befehl rm erweiteren um diese --exclude Option. Wobei Du diese natürlich erst einmal definieren müsstest. Denn, was passiert, wenn der Ausdruck irgendwo innerhalb der Verzeichnisse gefunden wird. Bleibt dann alles stehen oder wird nur bei übergeordneten Verzeichnissen geprüft? ... Ich hoffe, das hilft Dir ein bisschen weiter. Ciao Jochen -- Wissenswertes rund um Linux/FreeBSD und Samba: http://www.informatik-archiv.de
Hi Jochen, Am Donnerstag, 12. August 2004 15:43 schrieb Jochen Schrader:
Andreas Hergesell wrote:
Du denkst also an ein Konstrukt ala "find bla bla | rm bla bla" Korrekt?
Nicht ganz! 1. kann find das Löschen von leeren Verzeichnissen und Dateien (-delete) schon selbst erledigen, 2. klappt das mit der Pipe nicht, 3. wenn man -delete nicht verwenden möchte/kann, kann man mittels -exec u. xargs oder so etwas die Dateinamen an rm weiter reichen.
Ein Beispiel: Verzeichnisse user01 user02 user03 spezialuser01 stehen bleiben soll spezialuser01, wir befinden uns im Arbeitsverzeichnis, (d. h. ./user01 ...) Also, angenommen die obigen Verzeichnisse sind Verzeichnisse mit weiterem Inhalt, dann klappt: find -x . -maxdepth 1 -not -name "spezial*" -print0 | xargs -0 rm -rf
find erlaubt Dir mehr Möglichkeiten der detailierten Suche. Alles hängt davon ab, ob Du Deine Verzeichnisse in irgend ein Muster quetschen kannst. Das können auch Erstellungszeiten oder Permissions sein.
Eine andere Lösungsmöglichkeit ist dann das ganze über ein Skript zu machen. Das Skript müsste den Befehl rm erweiteren um diese --exclude Option. Wobei Du diese natürlich erst einmal definieren müsstest. Denn, was passiert, wenn der Ausdruck irgendwo innerhalb der Verzeichnisse gefunden wird. Bleibt dann alles stehen oder wird nur bei übergeordneten Verzeichnissen geprüft? ...
OK, erstmal vielen Dank für die Mühe! Die Sache wird jetzt klarer für mich. Jetzt werd ich mal die Syntax übersetzen und dann anpassen :-)
Ich hoffe, das hilft Dir ein bisschen weiter.
Sehr sogar!
Ciao Jochen
Viele Grüße Andreas -- Prozessor sagt zum Speicher: "Bitte ein Bit!" Der Anwender zum Computer: "Ich trink eins mit!" (Unbekannt)
Hi On Thursday 12 August 2004 15:43, Jochen Schrader wrote:
find -x . -maxdepth 1 -not -name "spezial*" -print0 | xargs -0 rm -rf ^^ Was'n das? Also mein find kennt das nicht.
find erlaubt Dir mehr Möglichkeiten der detailierten Suche. Alles hängt davon ab, ob Du Deine Verzeichnisse in irgend ein Muster quetschen kannst. Das können auch Erstellungszeiten oder Permissions sein. Es geht sonst mit -o(r). Wenn die Verzeichnisse xx, sdf und abc ausgeschlossen werden sollen find . -name xx -o -name sdf -o name abc -o -type d -exec rm -rf {} \;
Erklärung: Alles rechts vom -o wird nicht ausgewertet wenn links vom -o ein erfolgreicher test war. mfg Axel
Axel Heinrici wrote:
On Thursday 12 August 2004 15:43, Jochen Schrader wrote:
find -x . -maxdepth 1 -not -name "spezial*" -print0 | xargs -0 rm -rf
^^ Was'n das? Also mein find kennt das nicht.
Der Befehl funktioniert bei mir, ich habs getestet. Hm, ich muss zugeben, dass ich die Manpage von find von FreeBSD benutzt habe. Ich hätte nicht gedacht, dass es dort so massive Unterschiede gibt. :-( In den Mails anderer dazu stehen dann wohl die richtigen Switches und Optionen. Ciao Jochen -- Wissenswertes rund um Linux/FreeBSD und Samba: http://www.informatik-archiv.de
Hallo, Am Thu, 12 Aug 2004, Andreas Hergesell schrieb:
Dazu möchte ich in einem Verzeichnis alle Unterverzeichnisse bis auf drei bestimmte löschen.
find . -type d -depth -not \( -name 'eins' -o -name 'zwei' \ -o -name 'drei' \) -exec echo {} \; Statt dem 'echo' kannst du, wenn alles stimmt, dann rm -rf nehmen. -dnh -- Jeder fängt irgendwann mal an. aber einige können dann nciht mehr aufhöhren. [WoKo in dag°]
David Haller schrieb:
Hallo,
Am Thu, 12 Aug 2004, Andreas Hergesell schrieb:
Dazu möchte ich in einem Verzeichnis alle Unterverzeichnisse bis auf drei bestimmte löschen.
find . -type d -depth -not \( -name 'eins' -o -name 'zwei' \ -o -name 'drei' \) -exec echo {} \;
Statt dem 'echo' kannst du, wenn alles stimmt, dann rm -rf nehmen.
oder direkt: find . -type d -depth -not \( -name 'eins' -o -name 'zwei' \ -o -name 'drei' \) -ok rm -rf {} \; -- Konstantin NEU: WLAN-Router für 0,- EUR* - auch für DSL-Wechsler! GMX DSL = supergünstig & kabellos http://www.gmx.net/de/go/dsl
participants (6)
-
Andreas Hergesell
-
Axel Heinrici
-
David Haller
-
Jochen Schrader
-
Konstantin Malakhanov
-
Maximilian Steinbauer