Scratch Geschrieben 14. Dezember 2005 Teilen Geschrieben 14. Dezember 2005 Hallo, dieses Script erstellt mir täglich einen Ordner mit dem aktuellen Datum #!/bin/sh dirname=`/bin/date +%Y-%m-%d` cd /backup/ mkdir $dirname Ich hätte aber noch gerne das es alle Ordner im Verzeichniss /backup/ löscht (inklusive Inhalt) die älter als 7 Tage sind. Kann ich date nutzen um das Datum vor 7 Tagen zu bilden (hab in der manpage nichts passendes gefunden)? Gruß Scratch Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
t3quill4b0y Geschrieben 14. Dezember 2005 Teilen Geschrieben 14. Dezember 2005 mit dem befehl find kannst du dir alle ordner die älter sind wie $date auflisten lassen. Syntax von find findest du hier: man find und poste bitte wie es funktioniert, interessiert mich nämlich cu Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Scratch Geschrieben 14. Dezember 2005 Autor Teilen Geschrieben 14. Dezember 2005 Ich habs ergoogelt ... /bin/date +%Y-%m-%d -d '7 days ago' Wenn ich fertig bin poste ich das Script! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Schlaubi Geschrieben 14. Dezember 2005 Teilen Geschrieben 14. Dezember 2005 Gute Idee...aber wenn du find benutzt, kannst du dir das umwandeln des Date-Strings sparen Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
1226 Geschrieben 14. Dezember 2005 Teilen Geschrieben 14. Dezember 2005 find /backup -type d -mtime +7 -exec rm -rf {} \; Damit werden alle Verzeichnisse unterhalb des Verzeichnisses /backup gelöscht, in denen während der letzten Woche keine Änderung vorgenommen wurde. Aus der Fragestellung geht nicht hervor, ob in den Tagen nach der Erstellung des Verzeichnisses noch Dateien hinzugefügt/verändert worden sind. Dann funktioniert o.g. Aufruf nämlich nicht. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Scratch Geschrieben 14. Dezember 2005 Autor Teilen Geschrieben 14. Dezember 2005 Hi, also ... die unschöne aber leichte Variante: #!/bin/sh dirname=`/bin/date +%Y-%m-%d` cd /backup/ mkdir $dirname dirname=`/bin/date +%Y-%m-%d -d '7 days ago'` rm -rf $dirname Problem ist hier wenn ein Ordner älter ist als die 7 Tage wird er nicht mehr angefasst. Sollte aber eigentlich nicht passieren ... die schönere Variante mit find. So wie sie momentan ist wäre sie zwar korrekt aber für die Praxis nicht gerade geeignet: #!/bin/sh dirname=`/bin/date +%Y-%m-%d` cd /backup/ mkdir $dirname /usr/bin/find . -ctime +168 -exec /bin/rm -rf {} \; -depth Problem hier ist das wenn eine Datei in dem Ordner angelegt wird verändert sich das Datum "last modified". Ich habe keine möglichkeit (weder mit mtime oder atime) gefunden das er wirklich das Datum nimmt an dem der Ordner erstell wurde. Evtl. kann mir da jemand helfen! Gruß Scratch Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
t3quill4b0y Geschrieben 14. Dezember 2005 Teilen Geschrieben 14. Dezember 2005 hm so als kleine Überlegeung, wie wäre es wenn du in die namen der ordner einen zeitstempel einbaust? der ist nämlich statisch und du kannst das einfachste format für dich auswählen und dann anhand der namen die ordner löschen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Scratch Geschrieben 14. Dezember 2005 Autor Teilen Geschrieben 14. Dezember 2005 Der Name an sich ist ja das Datum an dem der Ordner angelegt wurde. Das Skript sollte alle Ordner auslesen und vergleichen ob das Datum des Ordners kleiner gleich dem Datum heute() - x Tage ist. Damit hätte man eine gute Lösung! Ich mach mich gleich mal dran! Gruß Scratch Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Scratch Geschrieben 14. Dezember 2005 Autor Teilen Geschrieben 14. Dezember 2005 Ja Hallo, ich glaub ich hab nun eine super Lösung zusammengebaut. Sieht folgendermassen aus: #!/bin/sh dirname=`/bin/date +%Y-%m-%d` pastdirname=`/bin/date +%Y%m%d -d '7 days ago'` cd /backup/ /bin/mkdir -p $dirname for dir in * do dirtoint=`echo $dir | /bin/sed -e 's/[^0-9]//ig'` if [ $dirtoint -le $pastdirname ] then /bin/rm -rf $dir fi done Bei mir hats funktioniert, ich hoffe bei euch auch. Falls es noch jemand verbessern möchte oder einen Verbesserungsvorschlag hat einfach posten!!! Gruß Scratch Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.