画像名に含まれる数字の前に適切な数のゼロを追加するにはどうすればよいですか?

画像名に含まれる数字の前に適切な数のゼロを追加するにはどうすればよいですか?

などのファイルを含むフォルダがあります/User/me/Desktop/folder/images。私のウェブサイトにインポートすると、ファイルが誤ってソートされ、文字の優先順位によるソートではないように見える配列が表示されます。したがって、順序が正しくなるように、3桁ではなくすべての画像名をゼロで埋められた3桁の対応する名前に変更したいと思います。 Mac端末の1行にファイルがいっぱいのフォルダでこれを行うにはどうすればよいですか?key 1--name.jpgkey 10--name1.jpgkey 84--name.jpg -> key 9--name.jpg -> key 94--name.jpgkey 9--name.jpg -> key 84--name.jpg -> key 94--name.jpg9, 12, 99009, 012, 099

ベストアンサー1

たとえば、数値を抽出します。

$ echo 'key 88--name.jpg' | sed 's/key \([0-9]\+\)--.*/\1/'
88

printf を使用してフォーマットします。

$ printf '%04d' "88"
0088

名前に再度挿入します。

$ echo 'key 88--name.jpg' | sed 's/\(key [0-9]\+--\)/key 0088--/'
key 0088--name.jpg

1つのスクリプトですべて:

#!/bin/sh
for f in 'key '*'--name.jpg'; do
    a="$( echo "$f" | sed 's/key \([0-9]\+\)--.*/\1/' )"
    b="$( printf '%04d' "$a" )"
    c="$( echo "$f" | sed 's/\(key '"$a"'--\)/key '"$b"'--/' )"
    echo \
    mv -i "$f" "$c"
done

またはより速く:

#!/bin/sh
for f in 'key '*'--name.jpg'; do
    a="${f#key }"
    a="${a%--name.jpg}"
    b="$( printf 'key %04d--name.jpg' "$a" )"
    echo \
    mv -i "$f" "$b"
done

両方のスクリプトいいえ何でも変えてください。変更される内容のみが一覧表示されます。表示された内容が気に入ったら、その行をコメントアウトしてください(前に#を追加)echo \。それにもかかわらず、mvコマンドはファイルがすでに存在する場合、ファイルを上書きしません(-iオプション)。

おすすめ記事