linux/bash/unixでファイル名と日付を比較し、30日後に削除します。

linux/bash/unixでファイル名と日付を比較し、30日後に削除します。

たとえば、日付が異なる多くのファイルを含むディレクトリがあり、日付がファイル名と共に配置されているとします。私のファイル名の1つがtr_2017-12-05.htmlファイルの日付が2017-12-05今日の日付より30日前の場合は、2018-01-10古いファイルを削除する必要があります。 Linuxスクリプトとは何ですか?

答え1

ファイル名に実際の作成日がある場合は、検索を使用して削除してください。

find /path/ -ctime +30 -exe rm -f {} \;

過去30日以内に作成されたファイルは削除されます。

答え2

これはあなたに役立ちます:

#!/bin/bash

directory=./

for file in $(find $directory -maxdepth 1); do
    a='[^0-9]*([[:digit:]]{4}).([[:digit:]]{2}).([[:digit:]]{2})'
    [[ $file =~ $a ]];
    year=${BASH_REMATCH[1]}
    month=${BASH_REMATCH[2]}
    day=${BASH_REMATCH[3]}
    # echo "Year=$year Month=$month Day=$day"
    mydate=$year$month$day
    if [[ $mydate ]]; then
    [[ "$(date -d "$mydate" +'%s')" -gt "$(date -d "30 days ago" +'%s')" ]] && 
    echo rm -i "$file"
    fi
done

ファイルのリストが予想と一致したecho場合rm

関連情報