次の方法で、日付がどのように機能するかを確認できます。
date -d "$(date -d "Mar 31 2019" +%F) +1 month ago"
Sun Mar 3 00:00:00 EET 2019
したがって、先月の現在(3月の場合は現在ではない)に基づいて、現在の月から先月からの日数が減ると思います。
次の構文を試して、数日(31日以下の例)より古いファイルを削除できます。問題を解決するための1行(これは単純なアプローチのためです)。
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 $(date +%m)$(date +%y)| egrep -v" $(date +%y)| Su "| xargs | awk '{print $ NF}')-" $( cal $(date -d "+1 month ago" +%m)$(date +%y)| egrep -v "$(date +%y)| Su" | xargs | awk '{print $ NF}') | 紀元前
そこで、これら2か月間の違いを見つけます。
echo "$(cal $(date +%m)$(date +%y)| egrep -v" $(date +%y)| Su "| xargs | awk '{print $ NF}')-" $( cal $(date -d "+1 month ago" +%m)$(date +%y)| egrep -v "$(date +%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 /」に変数を追加することもできます。
結論:1か月(正確に)より古いファイルを削除する場合、「date」コマンドと「+1 month ago」を使用している場合は、正確な日数を調整する必要があります。