1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Dateien in geschachteltem Verzeichnis löschen

Dieses Thema im Forum "Sonstige Sprachen" wurde erstellt von xrax, 7. April 2014.

  1. xrax

    xrax Erfahrenes Mitglied

    Hallo zusammen,

    ich möchte auf einem Debian-Server alle Dateien löschen die älter als x Wochen sind.
    Die Dateien befinden sich in mehreren Ordnern welche Unterordner eines Hauptordners sind.

    Ich bekomme das mit Datum und Unterordner nicht auf die Reihe.

    Weiss jemand Rat ?

    Besten Dank
    xrax
     
  2. vfl_freak

    vfl_freak Premium-User

    Moin,

    wie schaut denn Dein Ansatz bisher aus :confused:

    Gruß
    Klaus
     
  3. xrax

    xrax Erfahrenes Mitglied

    Hallo VFL,

    find /var/parent -mtime +7 -exec rm {} \;
    Das würde mir alles in parent löschen was älter als 7 Tage ist.

    Ich kann auch mit
    ls /var/parent -R
    die Unterverzeichnisse finden.

    Ich möchte aber die files die älter als 7 Tage sind aus diesen Unterverteichnissen löschen.

    Besten Dank
    xrax
     
  4. deepthroat

    deepthroat Erfahrenes Mitglied

    Hi.

    Irgendwie ist mir noch unklar was du eigentlich willst bzw. wo dein Problem ist.

    find arbeitet rekursiv, d.h. es werden bei deinem Kommando alle Dateien in allen Unterverzeichnissen und auch die Unterverzeichnisse selbst, die älter sind als 7 Tage gelöscht.

    Was möchtest du denn jetzt löschen?
     
  5. xrax

    xrax Erfahrenes Mitglied

    Aha, auch in den Unterverzeichnissen. Das war mir nicht klar.
    Danke für die Antwort.

    gruß
    xrax
     
  6. Thinker

    Thinker Mitglied

    Der Aufruf hat so derzeit ein paar Probleme: Er findet (und löscht) auch Sachen, die keine Dateien sind, und er hat Probleme mit Leerzeichen im Dateinamen. Das geht so weit, daß er die falschen Dateien löschen würde.

    Ich würds daher so schreiben:
    Code (Text):
    1. find /var/parent -mtime +7 -type f -print0 |xargs -0 rm
    Alternativ kann man wohl auch
    Code (Text):
    1. find /var/parent -mtime +7 -type f -delete
    schreiben, wenn man ohne die Pipe auskommen mag.
     
  7. xrax

    xrax Erfahrenes Mitglied

    ok, sagt mir leider alles nicht viel. Will sagen, ich kann die Lösungen nicht bewerten.
    Wo kann ich denn sowas nachlesen/lernen ?

    Besten Dank
    xrax
     
  8. Thinker

    Thinker Mitglied

    Die Manpage von find ( "man find" auf der Konsole eintippen) ist sehr umfangreich und leicht zu lesen, meiner Meinung nach.

    Zur Erläuterung: Wenn du in einem Verzeichnis drei Dateien "A", "B" sowie "A B" hast und dein Find-Aufruf nur "A B" löschen soll, dann würde er
    Code (Text):
    1. rm A B
    aufrufen. Und rm löscht dann "A" sowie "B". Nicht wie gedacht, oder?

    Das umgehe ich, indem ich find mit -print0 aufrufe, damit gibt mir find die Dateinamen als sogenannte nullterminierte Strings aus, also ein besonderes Zeichen am Ende jedes Dateinamens. "xargs -0 rm" ruft nun für jeden nullterminierten String rm auf. Damit sind auch Leerzeichen im Dateinamen kein Problem mehr.

    Zum Thema "löscht mehr weg": Unter Linux ist alles eine Datei. Deswegen findet dein find-ausdruck eventuell auch Verzeichnisse. Die werden zwar nicht gelöscht, weil rm da einen Sicherheitsmechanismus hat, aber eine Fehlermeldung wird es trotzdem geben. Der Find-Ausdruck "-type f" filtert alles bis auf "reguläre Dateien". Auch hier ist die Manpage von find sehr informativ, was neben normalen Dateien alles in einem Linux-Dateisystem herumliegen kann…

    Ich hoffe, ich konnte ein wenig helfen.
     
Die Seite wird geladen...