Linuxでは、ファイル名に日付がある特定の基準でファイルを削除する

Linuxでは、ファイル名に日付がある特定の基準でファイルを削除する

以下の条件でフォルダからすべてのファイルを削除する必要があります。

ファイル名パターン:fileNameBeginDateEndDate.txt(YYYYMMDD形式の開始日と終了日)

現在の日付が開始日と終了日の間にないすべてのファイルを削除する必要があります。

たとえば、今日の日付が2018-01-16の場合、

  • 削除するファイル:File2016010120170101.txt
  • 削除しないファイル:File2016010120190101.txt

よろしくお願いします!

ベストアンサー1

このフィルタは、基準に一致するファイル名、つまり削除する必要があるファイル名のみを出力します。

perl -MTime::Piece -ne 'BEGIN { $now=localtime->ymd("")} ($s,$e)=($_=~m/(\d{8})(\d{8})\./); print $_ if $e lt $now || $s gt $now'

例:

 echo "File2016010120170101.txt" | perl -MTime::Piece -ne 'BEGIN { $now=localtime->ymd("")} ($s,$e)=($_=~m/(\d{8})(\d{8})\./); print $_ if $e lt $now || $s gt $now'
 File2016010120170101.txt
 echo "File2016010120190101.txt" | perl -MTime::Piece -ne 'BEGIN { $now=localtime->ymd("")} ($s,$e)=($_=~m/(\d{8})(\d{8})\./); print $_ if $e lt $now || $s gt $now'
 (nothing)

初期ファイル名のリストの取得方法に応じてリストを前処理し、xargs rm結果を実行できます。

できるだけ厳密に正規表現をファイルに適用することをお勧めします。および/または実際に削除する前に、削除したいファイルを確認してください。

おすすめ記事