Podría intentar ver cómo funciona la fecha de la siguiente manera:
date -d "$(date -d "Mar 31 2019" +%F) +1 month ago"
Sun Mar 3 00:00:00 EET 2019
Entonces, creo que según el mes pasado (no es el mes de marzo), disminuye el número de días desde el último mes desde el mes actual.
Puede probar la siguiente sintaxis para eliminar archivos anteriores a un número de días (en el ejemplo, por debajo de 31 días). Una línea para resolver el problema (esto es para un enfoque simple).
find /path/to/folder/with/arhives/ -mindepth 1 -mtime +31 -delete
Para un enfoque más detallado, también puede hacer algo como esto: 1. Encontrar el número de días para el mes actual:
cal $(date +%m) $(date +%y) | egrep -v "$(date +%y)|Su" | xargs | awk '{print $NF}'
Encontrar el número de días para el último mes:
echo "$ (cal $ (fecha +% m) $ (fecha +% y) | egrep -v" $ (fecha +% y) | Su "| xargs | awk '{print $ NF}') -" $ ( cal $ (fecha -d "+1 mes atrás" +% m) $ (fecha +% y) | egrep -v "$ (fecha +% y) | Su" | xargs | awk '{print $ NF}') El | antes de Cristo
Entonces ahora encontramos la diferencia entre esos dos meses:
echo "$ (cal $ (fecha +% m) $ (fecha +% y) | egrep -v" $ (fecha +% y) | Su "| xargs | awk '{print $ NF}') -" $ ( cal $ (fecha -d "+1 mes atrás" +% m) $ (fecha +% y) | egrep -v "$ (fecha +% y) | Su" | xargs | awk '{print $ NF}') El | antes de Cristo
Ahora asignemos algunas variables a estos 3 pasos. Paso 1 Nombre de la variable: FCM Paso 2 Nombre de la variable: FLM Paso 3 Nombre de la variable: 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)
Verifique si $ DCL es igual a 0 (cero) y elimine en función de la diferencia entre $ FCM y $ 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
También puede agregar una variable a "/ ruta / a / folde / with / arhives /".
Conclusión: si desea eliminar archivos anteriores a un mes (exactamente), debe ajustar el número exacto de días, si está utilizando el comando "fecha" y "hace +1 mes".