Linux シェルでのファイル名形式の確認

Linux シェルでのファイル名形式の確認

Linuxディレクトリからデータファイルを受け取ります。

ファイル名が「NNN-YYYYMMDD-NNNNNNNNN.pdf」パターンに従うことを確認する必要があります。ここで

  • NNNは数値(0〜9)を表します。
  • 「YYYYMMDD」は発効日を示す。 YYYYは年、MMは月(1〜12の間)、DDは日(月によって01から31の間の値になることがあります)です。
  • NNNNNNNNは数値です(例:0〜9のみ許可)。

ファイル名を確認するには、どのようなユーティリティ(SED、AWKなど)を使用し、どのように使用する必要がありますか?

ベストアンサー1

[[これはbashの演算子を使用して、次のパターンに従って現在のディレクトリ内のすべてのファイルをテストします。

  • 文字列の始まり^
  • 3桁
  • -
  • 8桁
  • -
  • 9桁
  • .pdf
  • 文字列の終わり$
  • 中央の8桁は、GNUの日付に従って有効な日付として計算されます。

上記の仮定を簡単に調整できます。

for f in *
do
  [[ $f =~ ^([0-9][0-9][0-9])-([0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9])-([0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]).pdf$ ]] && 
  date -d ${BASH_REMATCH[2]} &>/dev/null && 
  echo Valid: "$f"
done

おすすめ記事