ファイル名で指定した日付に基づいてファイルを削除する

ファイル名で指定した日付に基づいてファイルを削除する

ディレクトリには次のzipファイルがあります。

DBSOURCE20150601.gz
WINDOWS20150504.gz
NETWORK20150609.gz
PATCHTEST20150512.gz
.................
................

ファイル名に記載されている日付に基づいて10日を過ぎたzipファイルを削除したいと思います。例えば、

WINDOWS20150604.gz is file having date 4 June 2015.

私は次のことをしようとしていますが、なぜ10日後のファイルだけを削除するのではなく、すべてのzipファイルを削除するのかわかりません。

ten_days=$(date -d "10 days ago" +%Y%m%d)
for f in *[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].gz; do
  date=${f#*}
  date=${date%.gz}
  (( $date < $ten_days )) && rm "$f"
done

答え1

ファイル名から日付が正しく抽出されませんでした。これを行うには、次の操作を行う必要があります。

    date=${f#*}
    date=${date%.gz}
    date=`echo $date| rev `
    date=${date:0:8}
    date=`echo $date| rev `

これで日付を比較して削除できます。

答え2

最初の行にしたいと思います。たとえば、date=${f#*}コマンドを介して参照しているため、変数からコマンドが削除されます。この例のようにループに別々に渡されないため、inを使用して変数から最初の部分を削除することはできません。DBSOURCEf*[0-9]...[0-9].gz*date=${f#*}*forDBSOURCE

ファイル名構造が常に同じであれば、簡単に使用できます

date=${f//[^0-9]/}

数字以外の文字をすべて削除します。 (実際には数字以外のすべての文字を「なし」に置き換えます。)

tr別の方法は抽出日を使用することです。

date=`echo $f|tr -d '[:alpha:] [:punct:]'`

関連情報