Vous pouvez essayer de voir comment fonctionne la date comme suit:
date -d "$(date -d "Mar 31 2019" +%F) +1 month ago"
Sun Mar 3 00:00:00 EET 2019
Je pense donc que sur la base du mois dernier courant (pas courant, si c'est mars), diminue le nombre de jours à partir du dernier mois du mois courant.
Vous pouvez essayer la syntaxe suivante pour supprimer des fichiers antérieurs à un certain nombre de jours (dans l'exemple ci-dessous 31 jours). Une ligne pour résoudre le problème (c'est pour une approche simple).
find /path/to/folder/with/arhives/ -mindepth 1 -mtime +31 -delete
Pour une approche plus détaillée, vous pouvez également faire quelque chose comme ceci: 1. Trouver le nombre de jours pour le mois courant:
cal $(date +%m) $(date +%y) | egrep -v "$(date +%y)|Su" | xargs | awk '{print $NF}'
Trouver le nombre de jours du dernier mois:
echo "$ (cal $ (date +% m) $ (date +% y) | egrep -v" $ (date +% y) | Su "| xargs | awk '{print $ NF}') -" $ ( cal $ (date -d "il y a +1 mois" +% m) $ (date +% y) | egrep -v "$ (date +% y) | Su" | xargs | awk '{print $ NF}') | avant JC
Alors maintenant, nous trouvons la différence entre ces deux mois:
echo "$ (cal $ (date +% m) $ (date +% y) | egrep -v" $ (date +% y) | Su "| xargs | awk '{print $ NF}') -" $ ( cal $ (date -d "il y a +1 mois" +% m) $ (date +% y) | egrep -v "$ (date +% y) | Su" | xargs | awk '{print $ NF}') | avant JC
Permet maintenant d'assigner quelques variables à ces 3 étapes. Étape 1 Nom de la variable: FCM Étape 2 Nom de la variable: FLM Étape 3 Variable NAme: 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)
Vérifiez si $ DCL est égal à 0 (zéro) et supprimez en fonction de la différence entre $ FCM et $ 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
Vous pouvez également ajouter une variable à "/ path / to / folde / with / arhives /".
Conclusion: Si vous souhaitez supprimer des fichiers antérieurs à un mois (exactement), vous devez ajuster le nombre exact de jours, si vous utilisez la commande "date" et "il y a +1 mois".