bash: löscht alle Dateien älter als 1 Monat, aber lassen Sie Dateien von Montag
Ich habe eine Menge von täglichen backup-Archive. Verwalten der Datenträgerverwendung, ich brauche ein bash-Skript, das alle Dateien löschen, die älter als 1 Monat, aber halten Sie alle erstellten Dateien auf Montag, auch wenn Sie älter sind als 1 Monat.
Zum Beispiel, dies wird alle Dateien löschen zuletzt geändert mehr als 30 Tagen:
find /path/to/files* -type f -mtime +30 -delete
Aber ich weiß wirklich nicht, wie, um Dateien erstellt, am Montag.
- Dies löscht alle Dateien, die älter als 30j. find / -name "*" -mtime +30 -exec rm -f {}\; Sie meinen, Sie wollen, um Dateien erstellt am Montag, auch wenn Sie älter sind als 1 Monat ?
- ja, richtig. Wird die Frage anders stellen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Etwas einfacher und vorsichtiger version von @JoSo ' s Antwort:
Unterschiede:
date -r
zu bekommen, das Datum der letzten änderung einer Datei direkt%a
arbeiten mit mehr nachvollziehbar Wochentagsnamenrm "$1"
zunächst zu überprüfen, was gelöscht wird. Wenn gut aussieht, dann entweder stick| sh
am Ende wirklich ausführen, oder entfernen Sie dieecho
Allerdings, @JoSo ist richtig, darauf hinzuweisen, dass
date +%a
ist locale-abhängig, so dass diese Versionen wäre in der Tat sicherer:-r
wechseln. Aber ich möchte lieber nicht verwenden%a
denn es ist locale-abhängig. Es ist wahrscheinlich sicher, wenn Sie voranstellenLC_TIME=C
zu der date-Befehl.Als
find
meines Wissens hat kein Wochentag überprüfen, müssen Sie Sie aufrufen eines externen Programms.Update: Mit der
-r
Schalterdate
(Kudos Janos) und nur testen, nicht das löschen innerhalb der shell-Befehl wahrscheinlich ergibt die sauberste version:können Sie
um das Datum der Datei erstellt wurde.
Extrahieren Sie dann das Datum mit geschnitten haben wie var myvar=JJJJMMTT
und schließlich verwenden
wird es wieder den Tag der Woche, wenn es gibt 1 es war Montag.
In meinem Fall sind es wieder 4, weil 22/08/2013 war ein Donnerstag
Edit : wenn man all diese arbeiten als eine einfache Befehlszeile, wie Jo Also empfehlen, es ist besser !
Was über die Vermeidung von Teilprozessen in der Schleife: