30日以上経過したファイルを削除する方法

30日以上経過したファイルを削除する方法

ファイル名が作成日のファイルがある場合:

temp_30042019
temp_15042019
temp_10042021
temp_20022020
temp_21102022
temp_22102022
temp_01112022

ファイル名を今日の現在の日付と比較する方法

$ echo `date +"%d%m%Y"`
#output:
01112022

ファイル名の日付が30日より古い場合は削除されます。やっぱり手に入れて欲しい

temp_21102022
temp_22102022
temp_01112022

答え1

bashスクリプトの使用:

#!/usr/bin/bash

older30days=$(date --date 'now - 30 days' '+%Y-%m-%d')

echo Checking files before $older30days

for file in ./temp_*; do
   cdate="$(echo ${file#*_} | awk -v FS='' -v OFS='-' '{print $5$6$7$8,$3$4,$1$2}')"

   if [[ $cdate < $older30days ]]; then
      echo "Removing file: " $file
      rm $file
   fi
done

上記のコードを印刷する必要はありませんが、スクリプトでecho実際に何が起こっているのかを理解するのに役立ちます。

これを使用して、echo ${file#*_} | awk -v FS='' -v OFS='-' '{print $5$6$7$8,$3$4,$1$2}ファイル名の日付を有効な日付に解析してif使用条件を比較できます。たとえば、次のようなファイル名を使用します。

temp_15042019

上記のコードを使用して、次のように解析します。

2019-04-15 #YYYY-MM-DD

関連情報