Sie können versuchen, wie das Datum folgendermaßen funktioniert:
date -d "$(date -d "Mar 31 2019" +%F) +1 month ago"
Sun Mar 3 00:00:00 EET 2019
Ich denke also, dass basierend auf dem aktuellen letzten Monat (nicht aktuell, wenn dies März ist) die Anzahl der Tage des letzten Monats gegenüber dem aktuellen Monat verringert wird.
Sie können die folgende Syntax verwenden, um Dateien zu löschen, die älter als einige Tage sind (im Beispiel unter 31 Tagen). Eine Zeile, um das Problem zu lösen (dies ist ein einfacher Ansatz).
find /path/to/folder/with/arhives/ -mindepth 1 -mtime +31 -delete
Für eine detailliertere Vorgehensweise können Sie auch Folgendes tun: 1. Ermitteln der Anzahl der Tage für den aktuellen Monat:
cal $(date +%m) $(date +%y) | egrep -v "$(date +%y)|Su" | xargs | awk '{print $NF}'
Anzahl der Tage des letzten Monats ermitteln:
Echo "$ (cal $ (Datum +% m) $ (Datum +% y) | egrep -v" $ (Datum +% y) | Su "| xargs | awk '{print $ NF}') -" $ ( cal $ (Datum -d "vor +1 Monat" +% m) $ (Datum +% y) | egrep -v "$ (Datum +% y) | Su" | xargs | awk '{print $ NF}') | bc
Nun finden wir den Unterschied zwischen diesen beiden Monaten:
Echo "$ (cal $ (Datum +% m) $ (Datum +% y) | egrep -v" $ (Datum +% y) | Su "| xargs | awk '{print $ NF}') -" $ ( cal $ (Datum -d "vor +1 Monat" +% m) $ (Datum +% y) | egrep -v "$ (Datum +% y) | Su" | xargs | awk '{print $ NF}') | bc
Weisen Sie diesen 3 Schritten nun einige Variablen zu. Schritt 1 Variablenname: FCM Schritt 2 Variablenname: FLM Schritt 3 Variablenname: DCL
FCM=$(cal $(date +%m) $(date +%y) | egrep -v "$(date +%y)|Su" | xargs | awk '{print $NF}')
FLM=$(al $(date -d "+1 month ago" +%m) $(date +%y) | egrep -v "$(date +%y)|Su" | xargs | awk '{print $NF}')
DCL=$(echo "$FCM-$FLM" | bc)
Überprüfen Sie, ob $ DCL gleich 0 (Null) ist, und löschen Sie basierend auf der Differenz zwischen $ FCM und $ FLM:
if [ $DCL -ne 0 ]; then
if [ $DCL -lt 0 ]; then
find /path/to/folder/with/arhives/ -mindepth 1 -mtime +$(echo "$DCL+$FLM" | bc) -delete
elif [ $DCL -gt 0 ]; then
find /path/to/folder/with/arhives/ -mindepth 1 -mtime +$(echo "$DCL+$FLM" | bc) -delete
fi
else
find /path/to/folder/with/arhives/ -mindepth 1 -mtime +$FLM -delete
fi
Sie können auch eine Variable zu "/ path / to / folde / with / arhives /" hinzufügen.
Fazit: Wenn Sie Dateien löschen möchten, die älter als genau ein Monat sind, müssen Sie die genaue Anzahl der Tage anpassen, wenn Sie den Befehl "date" und "+1 month ago" verwenden.