Unixディレクトリから90日より古いファイルを削除するのに役立ちますが、月末の日付に属するファイルを保持する必要があります。 (例:2022年2月28日、3月31日、4月30日)例:
私のディレクトリにファイルがあります:/usr/home:
- ABC.txt.20220529 2022-05-30
- ABC.txt.20220530 2022-05-31
- ABC.txt.20220531 2022-06-01
- ABC.txt.20220601 2022-06-02
6月1日から91日にスクリプトを実行すると、1つが削除され、2/3/4は削除されません。シェルスクリプトまたはPythonスクリプトが必要です。
ベストアンサー1
これが考慮するファイル名の末尾にある日付(20220531
in ABC.txt.20220531
)であると仮定すると、zsh
次のようになります。
#! /bin/zsh -
zmodload zsh/datetime
day=86400
strftime -s range '<19700101-%Y%m%d>' $(( EPOCHSECONDS - 91 * day ))
not_last() {
local t
TZ=UTC0 strftime -rs t %Y%m%d $REPLY:e &&
TZ=UTC0 strftime -s t %d $(( t + day )) &&
(( t != 1 ))
}
echo rm -f -- **/*.txt.$~range(-.+not_last)
最後に変更された時間の場合:
#! /bin/zsh -
zmodload zsh/datetime
zmodload zsh/stat
day=86400
not_last() {
local t
stat -A t +mtime -- $REPLY &&
strftime -s t %d $(( t + day )) &&
(( t != 1 ))
}
echo rm -f -- **/*.txt.*(-.m+90+not_last)
毎月1日または末日にDSTが変更されると、翌日の計算に影響を与える可能性が高くなります。
ファイルの種類とmtimeを考えてみましょう。後ろにシンボリックリンクの解決。シンボリックリンクを無視するには、-
glob修飾子を削除してください。D
隠しファイルも考慮するには、修飾子を追加してください。**/
サブディレクトリのファイルを考慮したくない場合は、そのファイルを削除してください。
echo
結果が満足な場合は、削除(テスト実行)してください。
の選択ファイルm+90
が91日以上のように90日以上のファイルに変更してください。find
-mtime +90
m+89