15日を過ぎたファイルを削除する(月間および年間バージョンを除く)

15日を過ぎたファイルを削除する(月間および年間バージョンを除く)

簡単な検索スクリプトを使用して、30日以上経過したバックアップtarファイルを削除していますが、履歴を保存してより詳細に表示できるように、過去15日間に作成されたすべてのバックアップを維持するように切り替えたいと思います。毎月1日(12ヶ月)と毎年1月1日(12年を振り返る日)です。これを行う最もエレガントな方法は何ですか?

ベストアンサー1

ファイルに正しいファイルシステムレベルのタイムスタンプがある場合そして日付はファイル名(たとえば、backup-20230713.tar.gz周囲)に含まれ、次のようになります。

# delete files older than 30 days, except ones from the first of each month
find . -name 'backup-*.tar.gz' -mtime +30 ! -name '*-??????01.tar.gz' -delete

# delete files older than a year, except ones from January 1st
find . -name 'backup-*.tar.gz' -mtime +366 ! -name '*-????0101.tar.gz' -delete

# delete everything older than 12 years:
find . -name 'backup-*.tar.gz' -mtime +$(( 12 * 366 )) -delete

あるいは、ファイルが作成されたら、「グループ」に基づいて別々のディレクトリにファイルを配置するだけです。たとえば、毎年最初の日は、yearly/残りmonthly/も同じですdaily/。次に、次のようにします。

find daily/   -mtime +30 -delete
find monthly/ -mtime +366 -delete
find yearly/  -mtime +$((12 * 366)) -delete

おそらく、このようなものを使用する前に広範囲にテストする必要があります。 (etcを使用してテストファイルを作成し、etcなしでコマンドをtouch -d試してください)find-delete

おすすめ記事