다음과 같이 날짜가 어떻게 작동하는지 확인할 수 있습니다.
date -d "$(date -d "Mar 31 2019" +%F) +1 month ago"
Sun Mar 3 00:00:00 EET 2019
따라서 지난 달 현재 (현재는 3 월인 경우에는 현재가 아님) 기준으로 지난 달부터 현재 달의 날짜 수가 줄어든 것으로 생각합니다.
다음 구문을 시도하여 며칠이 지난 파일 (예 : 아래 31 일)을 삭제할 수 있습니다. 문제를 해결하기위한 한 줄 (간단한 접근)입니다.
find /path/to/folder/with/arhives/ -mindepth 1 -mtime +31 -delete
보다 자세한 접근 방식을 위해 다음과 같이 할 수도 있습니다. 1. 현재 달의 일 수 찾기 :
cal $(date +%m) $(date +%y) | egrep -v "$(date +%y)|Su" | xargs | awk '{print $NF}'
지난 달의 일 수 찾기 :
echo "$ (cal $ (날짜 + % m) $ (날짜 + % y) | egrep -v"$ (날짜 + % y) | Su "| xargs | awk '{print $ NF}')-"$ ( cal $ (날짜 -d "+1 개월 전"+ % m) $ (날짜 + % y) | egrep -v "$ (날짜 + % y) | Su"| xargs | awk '{print $ NF}') | 기원전
이제 두 달의 차이점을 발견했습니다.
echo "$ (cal $ (날짜 + % m) $ (날짜 + % y) | egrep -v"$ (날짜 + % y) | Su "| xargs | awk '{print $ NF}')-"$ ( cal $ (날짜 -d "+1 개월 전"+ % m) $ (날짜 + % y) | egrep -v "$ (날짜 + % y) | Su"| xargs | awk '{print $ NF}') | 기원전
이제이 3 단계에 변수를 할당하겠습니다. 1 단계 변수 이름 : FCM 2 단계 변수 이름 : FLM 3 단계 변수 이름 : 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)
$ DCL이 0인지 확인하고 $ FCM과 $ 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
"/ path / to / folde / with / arhives /"에 변수를 추가 할 수도 있습니다.
결론 : 한 달보다 오래된 파일 (정확하게)을 삭제하려면 "date"명령과 "+1 개월 전"을 사용하는 경우 정확한 일 수를 조정해야합니다.