MENU

文字列混じりのファイル名の数字部分をゼロ埋めするスクリプト

目次

背景

Linux や macOS などのシステムでよく使われる ls コマンドで出力されたファイル名リストが整列されていないと、作業効率が下がることがあります。特に、ファイル名の後ろに数字がついている場合、a1.png, a2.png, a10.png のように整列されていないことがよくあります。

この問題を解決するために、Fish シェルと Bash シェルで数字部分をゼロ埋めするスクリプトを作成します。

Fish シェル

Fish シェルでは以下のようにスクリプトを書きます。

for file in *.png
    set name (string match -r "[a-zA-Z]+" $file)
    set num (string match -r "\d+" $file)
    set new_num (printf "%02d" $num)
    mv $file "$name$new_num.png"
end

ワンライナー

for file in *.png; set name (string match -r "[a-zA-Z]+" $file); set num (string match -r "\d+" $file); set new_num (printf "%02d" $num); mv $file "$name$new_num.png"; end

Bash シェル

Bash シェルでは以下のようにスクリプトを書きます。

for file in *.png; do
    name=$(echo "$file" | grep -o "^[a-zA-Z]*")
    num=$(echo "$file" | grep -o "[0-9]*")
    new_num=$(printf "%02d" $num)
    mv "$file" "$name$new_num.png"
done

ワンライナー

for file in *.png; do name=$(echo "$file" | grep -o "^[a-zA-Z]*"); num=$(echo "$file" | grep -o "[0-9]*"); new_num=$(printf "%02d" $num); mv "$file" "$name$new_num.png"; done

まとめ

この記事で紹介したスクリプトを使えば、ls コマンドで出力されるファイル名の数字部分をゼロ埋めして、整列されたリストを得ることができます。Fish シェルと Bash シェルの両方で実現可能です。

目次