90日を過ぎたファイルは削除する必要があります(月末日を除く)

90日を過ぎたファイルは削除する必要があります(月末日を除く)

Unixディレクトリから90日より古いファイルを削除するのに役立ちますが、月末の日付に属するファイルを保持する必要があります。 (例:2022年2月28日、3月31日、4月30日)例:

私のディレクトリにファイルがあります:/usr/home:

  1. ABC.txt.20220529 2022-05-30
  2. ABC.txt.20220530 2022-05-31
  3. ABC.txt.20220531 2022-06-01
  4. ABC.txt.20220601 2022-06-02

6月1日から91日にスクリプトを実行すると、1つが削除され、2/3/4は削除されません。シェルスクリプトまたはPythonスクリプトが必要です。

ベストアンサー1

これが考慮するファイル名の末尾にある日付(20220531in 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 +90m+89

おすすめ記事