Możesz spróbować zobaczyć, jak działa data, wykonując następujące czynności:
date -d "$(date -d "Mar 31 2019" +%F) +1 month ago"
Sun Mar 3 00:00:00 EET 2019
Myślę więc, że na podstawie aktualnego miesiąca z poprzedniego miesiąca (nie aktualnego, jeśli to marzec), zmniejsza liczbę dni od ostatniego miesiąca od bieżącego miesiąca.
Możesz wypróbować następującą składnię, aby usunąć pliki starsze niż kilka dni (w przykładzie poniżej 31 dni). Jedna linia do rozwiązania problemu (jest to proste podejście).
find /path/to/folder/with/arhives/ -mindepth 1 -mtime +31 -delete
Aby uzyskać bardziej szczegółowe podejście, możesz również zrobić coś takiego: 1. Znajdowanie liczby dni dla bieżącego miesiąca:
cal $(date +%m) $(date +%y) | egrep -v "$(date +%y)|Su" | xargs | awk '{print $NF}'
Znajdowanie liczby dni w ostatnim miesiącu:
echo "$ (cal $ (data +% m) $ (data +% y) | egrep -v" $ (data +% y) | Su "| xargs | awk '{print $ NF}') -" $ ( cal $ (data -d "+1 miesiąc temu" +% m) $ (data +% y) | egrep -v "$ (data +% y) | Su" | xargs | awk '{print $ NF}') | pne
Teraz widzimy różnicę między tymi dwoma miesiącami:
echo "$ (cal $ (data +% m) $ (data +% y) | egrep -v" $ (data +% y) | Su "| xargs | awk '{print $ NF}') -" $ ( cal $ (data -d "+1 miesiąc temu" +% m) $ (data +% y) | egrep -v "$ (data +% y) | Su" | xargs | awk '{print $ NF}') | pne
Teraz możemy przypisać niektóre zmienne do tych 3 kroków. Krok 1 Nazwa zmiennej: FCM Krok 2 Nazwa zmiennej: FLM Krok 3 Nazwa zmiennej: 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)
Sprawdź, czy $ DCL wynosi 0 (zero) i usuń na podstawie różnicy między $ FCM i $ 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
Możesz także dodać zmienną do „/ path / to / folde / with / arhives /”.
Wniosek: jeśli chcesz usunąć pliki starsze niż miesiąc (dokładnie), musisz dostosować dokładną liczbę dni, jeśli używasz polecenia „data” i „+1 miesiąc temu”.