間違った数値形式でファイル名を一括変更するには?

間違った数値形式でファイル名を一括変更するには?

数値形式が正しくないファイルがたくさんあります。

prefix-#.ext       | for files with number 1-9
prefix-##.ext      | for files with number 10-99
prefix-###.ext     | for files with number 100-999

さらなる処理のために、すべての名前は次の形式でなければなりませんprefix-###.ext。これを行う簡単な方法はありますか?

ベストアンサー1

Debian、Ubuntu、およびその派生製品では、次のものを使用できます。renamePerlスクリプト:

rename 's/(?<=-)([0-9]+)/sprintf "%03d", $1/e' prefix-*.ext

一部のシステムでは、このコマンドをまたはとしてprenameインストールできますperl-rename。これはrenameutil-linuxファミリのユーティリティではなく、これを行う簡単な方法を提供しません。

zshでは利用可能ですzmv名前の変更とl パラメータ拡張フラグ0で埋めます。

autoload -U zmv
zmv '(prefix-)(*)(.ext)' '$1${(l:3::0:)2}$3'

通常のシェルループを使用してこれを実行することもできます。シェルには文字列操作のための良い構造はありません。 0で埋める1つの方法は1000を追加し、先行1

for x in prefix-*.ext; do
  n=${x%.ext}; n=${x##*-}; n=$((n+1000))
  mv "$x" "${x%-*.ext}${n#1}${x##*-}"
done

別の方法はprintfユーティリティを呼び出すことです。

for x in prefix-*.ext; do
  n=${x%.ext}; n=${x##*-}
  mv "$x" "${x%-*.ext}$(printf %03d "$n")${x##*-}"
done

おすすめ記事