Veröffentlicht 14. Dezember 200519 j 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
14. Dezember 200519 j 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
14. Dezember 200519 j Autor Ich habs ergoogelt ... /bin/date +%Y-%m-%d -d '7 days ago' Wenn ich fertig bin poste ich das Script!
14. Dezember 200519 j Gute Idee...aber wenn du find benutzt, kannst du dir das umwandeln des Date-Strings sparen
14. Dezember 200519 j 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.
14. Dezember 200519 j Autor 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
14. Dezember 200519 j 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.
14. Dezember 200519 j Autor 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
14. Dezember 200519 j Autor 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
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.