Image.png
たとえば、、Image (2).png
などの Windows スキャン ファイルがたくさんありました...
Image (19).png
。
これらの名前を に変更して、変換コマンドImage01.png
...
Image19.png
に投入しimagemagick
、出力 PDF に順番にページ付けできるようにする必要がありました。
最終的に使用したコマンドは次のとおりです。
ls * | awk '{print "mv \""$0"\" \"2"$0"2\"" }' | sed -e 's/2Image (/Image0/' | sed -e 's/).png2/.png/' | sed -e 's/[0-9]\([0-9][0-9]\)/\1/' | sed -e 's/2Image.png2/Image01.png/' | sh
2
これはうまくいきましたが、名前変更を機能させるためにランダムな文字を挿入するなどの汚い/バグのあるプレースホルダーを使用しない、より簡潔な方法があるはずです。
答え1
rename 's/^Image\.png$/Image01.png/ || s/^Image\s+\((\d+)\)\.png$/sprintf "%s%02d.png", "Image", $1/e' *.png
方法
- この
rename
ユーティリティは、あなたのシナリオに最適な方法です。その動作モデルは次のとおりです。ファイル名のリストを取得し、Perl
各ファイル名に有効な変換を適用し、変換の結果がファイル名の新しい名前になります。 - s/^Image.png$/Image(01).png/ => これは Image.png ファイルを処理するためのものです。
- s/^Image\s+((\d+)).png$/ => Image で始まり、任意の数の 1 つ以上のスペース、リテラルの開き括弧 ( および 1 つ以上の数字 \d+ と閉じ括弧 ) が続き、.png で終わるファイル名と一致します。
答え2
ファイルが と呼ばれImage.png
、Image (2).png
を経由していることがわかっているのでImage (19).png
、正規表現は必要ありません。
mv Image.png Image01.png
for i in {2..19}; do
zi=$( printf '%02d' "$i" )
mv "Image ($i).png" "Image$zi.png"
done
$zi
は、ゼロで埋められた 2 文字幅の整数バージョンになります$i
。