Puoi provare a vedere come funziona la data nel modo seguente:
date -d "$(date -d "Mar 31 2019" +%F) +1 month ago"
Sun Mar 3 00:00:00 EET 2019
Quindi penso che in base al curent del mese scorso (non curent, se quello è marzo), diminuisce il numero di giorni dall'ultimo mese dal mese corrente.
È possibile provare la sintassi seguente per eliminare i file più vecchi di un numero di giorni (nell'esempio di seguito 31 giorni). Una riga per risolvere il problema (questo è per un approccio semplice).
find /path/to/folder/with/arhives/ -mindepth 1 -mtime +31 -delete
Per un approccio più dettagliato potresti anche fare qualcosa del genere: 1. Trovare il numero di giorni per il mese corrente:
cal $(date +%m) $(date +%y) | egrep -v "$(date +%y)|Su" | xargs | awk '{print $NF}'
Trovare il numero di giorni per l'ultimo mese:
echo "$ (cal $ (data +% m) $ (data +% y) | egrep -v" $ (data +% y) | Su "| xargs | awk '{print $ NF}') -" $ ( cal $ (data -d "+1 mese fa" +% m) $ (data +% y) | egrep -v "$ (data +% y) | Su" | xargs | awk '{print $ NF}') | avanti Cristo
Quindi ora troviamo la differenza tra quei due mesi:
echo "$ (cal $ (data +% m) $ (data +% y) | egrep -v" $ (data +% y) | Su "| xargs | awk '{print $ NF}') -" $ ( cal $ (data -d "+1 mese fa" +% m) $ (data +% y) | egrep -v "$ (data +% y) | Su" | xargs | awk '{print $ NF}') | avanti Cristo
Ora consente di assegnare alcune variabili a questi 3 passaggi. Passaggio 1 Nome variabile: FCM Passaggio 2 Nome variabile: FLM Passaggio 3 NAme variabile: 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)
Verifica se $ DCL è uguale a 0 (zero) ed elimina in base alla differenza tra $ FCM e $ 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
Puoi anche aggiungere una variabile a "/ path / to / folde / with / arhives /".
Conclusione: se si desidera eliminare i file più vecchi di un mese (esattamente), è necessario modificare il numero esatto di giorni, se si utilizza il comando "data" e "+1 mese fa".