目次
背景
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 シェルの両方で実現可能です。