bash: Löschen Sie alle Dateien, die älter als 1 Monat sind, aber lassen Sie Dateien von Montags

8

Ich habe viele tägliche Backup-Archive. Um die Festplattennutzung zu verwalten, benötige ich ein Bash-Skript, das alle Dateien löscht, die älter als 1 Monat sind, aber alle Dateien, die montags erstellt wurden, behalten, auch wenn sie älter als 1 Monat sind.

Dies löscht zum Beispiel alle Dateien, die vor mehr als 30 Tagen zuletzt geändert wurden:

%Vor%

Aber ich weiß nicht wirklich, wie man montags erstellte Dateien behält.

    
freento 17.11.2013, 18:19
quelle

3 Antworten

9

Etwas einfachere und vorsichtigere Version von @ JoSos Antwort:

%Vor%

Die Unterschiede:

  • Verwenden von date -r , um das letzte Änderungsdatum einer Datei direkt zu erhalten
  • Verwenden von %a , um mit verständlicheren Wochentagsnamen zu arbeiten
  • Gib einfach zuerst rm "" zurück, um zu überprüfen, was gelöscht wird. Wenn es gut aussieht, dann kleben Sie entweder | sh am Ende, um wirklich auszuführen, oder entfernen Sie die echo

Allerdings weist @JoSo zu Recht darauf hin, dass date +%a Gebietsschema-abhängig ist, daher wären diese Versionen in der Tat sicherer:

%Vor%     
janos 17.11.2013, 19:09
quelle
5

Da find meines Wissens keine Wochentagsüberprüfung hat, müssen Sie ein externes Programm aufrufen.

%Vor%

Update: Mit -r wechseln zu date (Kudos zu Janos) und nur testen, nicht innerhalb der Shell-Befehl löschen wahrscheinlich ergibt die sauberste mögliche Version:

%Vor%     
Jo So 17.11.2013 18:39
quelle
0

können Sie

verwenden %Vor%

um das Datum zu erhalten, an dem die Datei erstellt wurde.

Entpacken Sie das Datum mit cut, um eine Var wie myvar = yyyymmdd

zu erhalten

und schließlich

%Vor%

es wird den Wochentag zurückgeben, wenn es 1 zurückgibt, war es Montag. In meinem Fall gibt es 4, weil 22/08/2013 ein Donnerstag war

Edit: Wenn Sie alle diese als eine einfache Befehlszeile als Jo arbeiten können Also vorschlagen, es ist besser!

    
user2196728 17.11.2013 18:36
quelle

Tags und Links