renameコマンドは複数存在する

windowsで撮ったスクリーンショットのファイル名を一括で変更したくなったので、renameコマンドを使ってみました。適当に検索してsedに似たような書式(こんな感じの→rename "s/xxx/yyy/" xxx?.txt)のものを実行してみたところ、何にも起こらない…🤔

なぜなのか調べてみたところrenameには大きく2種類あるようで、古くからあるutil-linuxのコマンドとPerlに同梱されているコマンドで、お互い別物らしい。私が利用しているOSはfedoraで、このコマンドのmanを見てみるとutil-linuxのコマンドだということが分かりました。参考にしたコマンドは、おそらくUbuntuを使ってる人が使っているコマンドでこちらはPerlに同梱されているコマンドなので私の環境では実行出来なかったようです。

というわけで、以下のようなファイルがあった場合、

$ls
nameA-1.txt
nameA-2.txt
nameA-3.txt

以下のようにシンプルに書けばOK。

$rename "nameA(変更前の名前)" "nameB(変更後の名前)" *.txt

変更できてる。

$ls
nameB-1.txt
nameB-2.txt
nameB-3.txt

📕UNIX/Linuxの部屋 renameコマンドの使い方

📕Why rename simply doesn't work?