ファイル名の数字を使用して、多数のファイル名を一括変更します。

ファイル名の数字を使用して、多数のファイル名を一括変更します。

次のように、ファイル名に数字ラベルを含む数百のファイル名があります。

AAAA #12 SSSS.TXT
BBB #231 CDF.TXT
CDFSDAAAA #1 AAAASS.TXT

次のように名前を変更したいと思います。

#012 - AAAA #12 SSSS.TXT
#231 - BBB #231 CDF.TXT
#001 - CDFSDAAAA #1 AAAASS.TXT

どうすればいいですか?

ありがとう

ベストアンサー1

bashシェルでは

for file in *.TXT
do 
  [[ $file =~ \#([[:digit:]]+) ]] && mv -- "$file" "#$(printf '%03d' "${BASH_REMATCH[1]}") - ${file}"
done

これは、現在のディレクトリで次に終わるすべてのファイルを繰り返し、.TXTbashの条件式演算子と=~比較します。渡されたファイル名を右側の正規表現と比較します。正規表現は、ハッシュタグ(コメントではなくエスケープされている)といくつかの(括弧内にキャプチャされた)数を探します。貪欲な+ので、最初の数字ではなく数字(大文字と小文字は空白)で終わるできるだけ多くの数字(1桁、4桁など)が必要です。

Bashはキャプチャされた数字を保存します${BASH_REMATCH[1]}(最初の角かっこセットなので)。printf3桁までゼロで対応する数字を入力-し、残りの名前変更を実行するために追加します。

&&名前変更は、一致が成功した場合にのみ発生します(リンク経由)。

おすすめ記事