毎月1日に実行されるスクリプトがあります。このスクリプトでは、先月1日以前に変更されたすべてのファイルを削除したいと思います。例えば。このスクリプトは3月1日に実行されます。 2月1日より前に作成されたファイルをすべて削除したいと思います。可能ですか?
答え1
シェルスクリプトを使用してください。
#!/bin/sh
dir_to_check='/root/temp/somedir'
last_month=$(date -d "-1 month -$(($(date +%d)-1)) days" +%Y-%m-%d)
find "$dir_to_check" ! -newermt "$last_month" -type f -exec rm {} \;
dir_to_check='/root/temp/somedir'
ファイルを検索するディレクトリ(削除しようとしなかったらいいです。)みんな先月以前に作成されたコンピュータのファイル)。
last_month=$(date -d "-1 month -$(($(date +%d)-1)) days" +%Y-%m-%d)
- 変数を前月1日に設定します。
find "$dir_to_check" ! -newermt "$last_month" -type f -exec rm {} \;
- 変更された日付が前月1日より前のすべてのファイルを検索して削除します。
答え2
作成時にファイルを見つけるのは最も簡単ではありませんが、最後に変更されたファイルまたは最後にアクセスされたファイルがあなたにも役立ちますか?
最も簡単ですが精度が低下する方法は、検索を実行して変更されてから31日以上経過したすべてのファイルを選択することです。その後、findで生成されたファイルのリストを処理したり、findコマンドで削除を実行したりできます。
- 最後に変更されてから31日以上経過したファイルを見つけます。
find <dir> -type f -mtime +31
- 最後に変更されてから31日以上経過したファイルを見つけて削除します。
find <dir> -type f -mtime +31 -exec rm {} \;
アクセス時間を確認するには、-mtime
に置き換えます-atime
。
-newerBt <creation_date>
X日前に生成されたファイルを見つけるには(バージョン4.3.3以降)を使用できます。アクセス、変更、または変更基準を使用するようにフォーマットを調整できます。
- 2018年1月1日より前に作成されたファイルを探す:
find <dir> -type f -newerBt 2018-01-01