Löschen von Verzeichnissen älter als x Tage per Cron (Script)

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Siegfried29, 31.03.2008.

  1. #1 Siegfried29, 31.03.2008
    Zuletzt bearbeitet: 01.04.2008
    Siegfried29

    Siegfried29 Jungspund

    Dabei seit:
    31.03.2008
    Beiträge:
    11
    Zustimmungen:
    0
    Hallo,nach Stundenlanger Suche mit meinem Freund Google versuch ich es jetzt mal hier....

    Folgendes vorhaben.

    Ich brauche ein Script was mir in einem "Verzeichniss" alle Verzeichnisse löscht die ein bestimmtes Alter überschritten haben.

    Die möglichkeit Dateien zu löschen die älter als x Tage sind habe ich bereits gefunden.

    Nochmals zu Erklärung

    Beispiel

    /srv/www/htdocs/ipc/pics <----- Verzeichniss

    Darin befinden sich etliche Verzeichnisse ohne erkennbares Benennungsmuster

    Ich möchte also das alle Verzeichnisse unter /srv/www/htdocs/ipc/pics gelöscht werden die älter als 14 Tage sind.


    Wie und womit wäre das möglich. Am liebsten wäre mir natürlich ein Shellsript was ich per cron ausführen lassen kann.

    Mein System

    OS = Suse Linux 10.1 32 Bit
    Shell = Bash


    Bedanke mich jetzt schon mal für eure Hilfe und bin auf eure Ideen gespannt....


    Viele Grüße Siegfried
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 bytepool, 01.04.2008
    Zuletzt bearbeitet: 01.04.2008
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hi,

    das hast du doch schon ganz richtig erkannt, sollte sich mit einem Shellskript doch ziemlich schnell und einfach machen lassen.

    Schau dir mal die manpage von find an, zusammen mit rm hast du dann doch schon alles was du brauchst, wenn ich mich nicht irre ;)

    IMHO liegt das hier uebrigens im falschen Forum.

    mfg,
    bytepool
     
  4. #3 Siegfried29, 01.04.2008
    Siegfried29

    Siegfried29 Jungspund

    Dabei seit:
    31.03.2008
    Beiträge:
    11
    Zustimmungen:
    0
    Ich bin mal ehrlich,was rede ich,bin immer ehrlich.....

    Ich erhoffe mir das mir hier jemand das ding schreibt.....

    Ich weiß,es ist nur nen Einzeiler warscheinlich,aber genau den brauch ich :)

    Hab zu viel Respekt vorm bösen RM :) Also das ich da selbst rum probiere.....

    Wäre also sehr dankbar wenn es mir einer ab nimmt,des weiteren iss mein Englisch irgend wie meinem alter entsprechend nicht mehr sehr frisch....


    Des weiteren,im falschen Forum geschrieben? Sorry,muss das wohl einer verschieben :) Habt Geduld mit mir,ich steig hier noch durch :)
     
  5. sinn3r

    sinn3r Law & Order
    Moderator

    Dabei seit:
    28.12.2006
    Beiträge:
    2.764
    Zustimmungen:
    0
    Ort:
    Wentorf
    Verschoben.

    Bitte noch OS und die verwendete Shell angeben.
     
  6. #5 bytepool, 01.04.2008
    Zuletzt bearbeitet: 01.04.2008
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hi,

    na gut, aber nur weil ich schon lange kein bash skript mehr geschrieben hab, und ich da grad mal wieder Spass dran hatte ;)
    Im allgemeinen lohnt es sich echt die Grundlagen vom skripting zu lernen, das macht Spass und ist nuetzlich.

    Code:
    #!/bin/bash
    
    path="/pfad/zu/verzeichnis/"
    
    for dir in $(find $path -atime +14 -type d); do
        rm -rfv $dir;
    done
    
    Das ist jetzt ungetestet, sollte aber eigentlich gehen. Aber rm -rf ist natuerlich boese, da musst du gut mit aufpassen.
    Du solltest das auf jeden Fall erst in einem Test Verzeichnis testen.

    Edit:
    Achso, wenn du das als cronjob haben willst, willst du wohl nicht die verbose Option, also nur rm -rf.

    Edit2:
    Eventuell hat das Skript Probleme mit Verzeichnisnamen die Leerzeichen enthalten. Aber Leerzeichen in Dateinamen gehoeren sich ja auch nicht ;)

    mfg,
    bytepool
     
  7. #6 Siegfried29, 01.04.2008
    Siegfried29

    Siegfried29 Jungspund

    Dabei seit:
    31.03.2008
    Beiträge:
    11
    Zustimmungen:
    0
    Also,leider noch kein Erfolg.... hab nen Testverzeichniss mit Verzeichnissen älter als 14 tagen,es wird nichts gelöscht.....

    pack ich deine idee in ne einfache datei,sprich autodelete oder in ne autodelete.sh

    ausführbar ist sie jedenfalls,habe mal beide varianten angelegt,aber es bringen beide keinen erfolg. es wird kein verzeichniss gelöscht....

    selbstredend als root ausgeführt....
     
  8. #7 bytepool, 01.04.2008
    Zuletzt bearbeitet: 01.04.2008
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Oh, ehm, definiere doch bitte mal aelter...
    -atime steht fuer access time, also Zugriffszeit, d.h. es wird abgefragt, ob auf die Datei in den letzten 14 Tagen zugegriffen wurde.

    Edit:
    Eventuell ist -ctime das was du suchst. Das gibt die letzte Statusaenderung der Datei.

    mfg,
    bytepool
     
  9. #8 Siegfried29, 01.04.2008
    Zuletzt bearbeitet: 01.04.2008
    Siegfried29

    Siegfried29 Jungspund

    Dabei seit:
    31.03.2008
    Beiträge:
    11
    Zustimmungen:
    0
    Also ich meine definitiv Verzeichnisse die Älter als 14 Tage alt sind.... sprich vor 15 Tagen und mehr angelegt wurden....

    glaube ich muss auch erwähnen das sich in den Verzeichnissen Dateien befinden oder?

    Also nochmal zusammen gefasst,ich möchte das er Verzeichnisse in einem Verzeichniss löscht,er soll schauen was älter als 14 tage alt ist und es löschen,dabei zu beachten,die verzeichnisse die er löschen soll sind nicht leer,darin befinden sich ab und zu auch verzeichnisse und IMMER dateien....

    So,nu haben wir es :)

    ///edit Musste gerade leider woanders lesen das rmdir NIEMALS Verzeichnisse löscht in denen sich noch dateien befinden.... Was machen wa denn nun? Doch immer von Hand alte Verzeichnisse samt inhalt löschen???
     
  10. #9 bytepool, 01.04.2008
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hi,

    also sonst koennte ich nur noch -mtime anbieten, das ist die modification time, also die Zeit zu der die Datei als letztes geaendert wurde ;)
    Wie man an die Zeit der Erstellung rankommt weiss ich gar nicht.

    Ausserdem fiel mir grade ein, dass find standardmaessig rekursiv arbeitet, d.h. du solltest auch noch -maxdepth 1 setzen, damit er nur die Verzeichnisse im uebergebenen Verzeichnis findet. Den Rest erledigt dann rm.

    Edit:
    Also das sollte dann in etwa so aussehen:
    Code:
    for dir in $(find $path -maxdepth 1 -mtime +14 -type d); do
        rm -rf $dir;
    done
    
    mfg,
    bytepool
     
  11. #10 Siegfried29, 01.04.2008
    Siegfried29

    Siegfried29 Jungspund

    Dabei seit:
    31.03.2008
    Beiträge:
    11
    Zustimmungen:
    0
    Code:
    #!/bin/bash
    
    path="/home/test/müll/"
    
    for dir in $(find $path -maxdepth 1 -mtime +2 -type d); do
        rm -rfv $dir;
    done

    In /home/test/müll/ befinden sich etliche ordner mit dateien darin,einige ordner von heute,einige älter,maximal 5 tage alt,habe deswegen mal testweise deinen code auf -mtime +2 gesetzt.....

    Und trotzdem passiert nichts....

    meine Datei heisst autodelete.sh ausführen tu ich sie als root

    testserver:~ # ./autodelete.sh
    testserver:~ # autodelete.sh

    Beide Varianten bringen weder nen Fehler,noch nen Erfolg....

    doch ne schwere Geburt oder.... :)
     
  12. #11 bytepool, 01.04.2008
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hast du mal geguckt was dir einfach nur "find ./ -maxdepth 1 -mtime +2 -type d" in dem Verzeichnis ausgibt?

    Im uebrigen scheint find auch das aktuelle Verzeichnis (./) mit auszugeben, was natuerlich nicht das ist was du willst, denn wenn das als Argument an rm -rf uebergeben wird, wuerde er das root Verzeichnis (von dem Aufruf) direkt mit Loeschen. Muesste man wohl auch noch mit rausnehmen, kA ob find dafuer eine option hat, oder ob man das mit einer if Abfrage machen muesste.

    mfg,
    bytepool
     
  13. #12 Siegfried29, 01.04.2008
    Zuletzt bearbeitet: 01.04.2008
    Siegfried29

    Siegfried29 Jungspund

    Dabei seit:
    31.03.2008
    Beiträge:
    11
    Zustimmungen:
    0
    find ./ -maxdepth 1 -mtime +2 -type d

    nach diesem Befehl zeigt er mir 5 Ordner an,13 befinden sich im Ordner,also scheint er ja schon mal die zu finden die älter als 2 tage sind.... nur das löschen scheint ihm nen problem zu machen.....

    Folgende Ausgabe

    Code:
    testserver:/home/test/müll # find ./ -maxdepth 1 -mtime +2 -type d
    ./BilderMesse 28032008
    ./BilderMesse 26032008
    ./BilderMesse 25032008
    ./BilderMesse 22032008
    ./BilderMesse 11032008
    testserver:/home/test/müll #
    
    


    Aufpassen,habe jetzt mal in deinen code das rm -rfv durch rm -rfiv ersetzt.....

    Schau dir mal die meldung an,evtl kannst damit was anfangen.....


    Code:
    
    testserver:~ # autodelete.sh                                                                     
    rm: cannot lstat `/home/test/müll/BilderMesse 28032008': No such file or directory
    rm: cannot lstat `BilderMesse 26032008': No such file or directory
    rm: cannot lstat `BilderMesse 25032008': No such file or directory
    rm: cannot lstat `BilderMesse 22032008': No such file or directory
    rm: cannot lstat `/home/test/müll/BilderMesse 11032008': No such file or directory
    testserver:~ #
    
    Das ist doch komisch oder?
     
  14. #13 bytepool, 01.04.2008
    Zuletzt bearbeitet: 01.04.2008
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Wer schrieb denn auch was von rmdir? Ich schrieb "rm -rf", das ist ein voellig anderer Befehl.

    Und sehe ich da etwa Leerzeichen in den Verzeichnisnamen? Siehe einen meiner Edits von weiter oben ;)
    Das Skript kann in der jetztigen Form damit nicht umgehen. Laut manpage laesst sich das Problem mit einem bestimmten Parameter umgehen, aber ich habe noch nicht wirklich rausgefunden wie das funktionieren soll. Da muessten wohl die find Spezialisten hier ran ;)

    mfg,
    bytepool
     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. Gast1

    Gast1 Guest

    Ich würde das ja mittels "-exec" machen.
     
  17. #15 bytepool, 01.04.2008
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Stimmt, macht Sinn. Ich hab noch nie mit find in nem Skript gearbeitet, aber -exec scheint wie geschaffen dafuer... Wieder was gelernt.
     
Thema: Löschen von Verzeichnissen älter als x Tage per Cron (Script)
Besucher kamen mit folgenden Suchen
  1. find lösche alle älter als maxdepth

    ,
  2. linux dateien nach alter löschen

    ,
  3. linux dateien und ordner löschen älter als

    ,
  4. linux bash script dateien und verzeichnisse löschen älter als,
  5. verzeichnisse älter als löschen linux
Die Seite wird geladen...

Löschen von Verzeichnissen älter als x Tage per Cron (Script) - Ähnliche Themen

  1. Script zum Bereinigen von Dateien mit Unterverzeichnissen (Schadcode löschen) eilt

    Script zum Bereinigen von Dateien mit Unterverzeichnissen (Schadcode löschen) eilt: Ich tue mich etwas schwer mit shell-Scripten und benötige dringen ein ständig anpassbares Script, das immer ab dem Stammverzeichnis in dem ich...
  2. 32-Bit als Standard in Wine // Wine komplett löschen

    32-Bit als Standard in Wine // Wine komplett löschen: Hallo, soweit ich das verstanden habe installiert man Windows-Programme unter Wine bei einem 64-Bit-Linux standardmäßig auch als 64-Bit-Prpgramm....
  3. Wie kann ich das RAM löschen?

    Wie kann ich das RAM löschen?: Wie kann ich das RAM löschen? Danke im Vorraus
  4. Löschen mit Wildcard wenn Space im Pfad ist?

    Löschen mit Wildcard wenn Space im Pfad ist?: Hallo zusammen weder rm "/var/lib/vmware/Virtual Machines/Virtual Machine/"*.lck -R noch rm "/var/lib/vmware/Virtual...
  5. Dateien ab einer bestimmten Zeile löschen

    Dateien ab einer bestimmten Zeile löschen: Hallo, ich habe ein Skript geschrieben, welches mir mehrere Dateien in eine einzige Datei zusammenführt. Die einzelnen Dateien enthalten aber...