[Shell] zsh の zmv でファイル名を一括で変更する

それ zsh でできるよ的なものを見つけたので memo.

@mollifier さんのブログと Twitter で、zsh と metal の勉強をいつもさせて頂いている。

設定

~/.zshrc あたりに下記を設定しておく。

~/.zshrc
autoload -Uz zmv
# alias zmv='noglob zmv -W'

2行目はお好みで。
ファイル名をいろいろ書き換えたい場合などは、オプションなしが便利でした。

つかいかた

連番のファイルがあったとして。とりあえず下記で作成。

% touch {1..30}.txt

こんな形で先ほど設定した zmv を実行。

% zmv *.txt *.md

-n オプション付きで dry run

% zmv -n *.txt *.md
mv -- 1.txt 1.md
mv -- 10.txt 10.md
mv -- 11.txt 11.md
mv -- 12.txt 12.md
    :
mv -- 7.txt 7.md
mv -- 8.txt 8.md
mv -- 9.txt 9.md

べんり!

詳しい使い方は元記事へ。

ありがとうございます。

% zmv -n '(*)_on.svg' '$1--on.svg'
mv -- icn_pin_listing_on.svg icn_pin_listing--on.svg
mv -- icn_pin_normal_on.svg icn_pin_normal--on.svg
mv -- icn_pin_star_on.svg icn_pin_star--on.svg
mv -- icn_pin_tower_on.svg icn_pin_tower--on.svg

% zmv -n '(*)_def.svg' '$1.svg'    
mv -- icn_pin_listing_def.svg icn_pin_listing.svg
mv -- icn_pin_normal_def.svg icn_pin_normal.svg
mv -- icn_pin_star_def.svg icn_pin_star.svg
mv -- icn_pin_tower_def.svg icn_pin_tower.svg

% zmv -n 'icn_(*).svg' 'icon_$1.svg'
mv -- icn_pin_listing--on.svg icon_pin_listing--on.svg
mv -- icn_pin_listing.svg icon_pin_listing.svg
mv -- icn_pin_normal--on.svg icon_pin_normal--on.svg
mv -- icn_pin_normal.svg icon_pin_normal.svg
mv -- icn_pin_star--on.svg icon_pin_star--on.svg
mv -- icn_pin_star.svg icon_pin_star.svg
mv -- icn_pin_tower--on.svg icon_pin_tower--on.svg
mv -- icn_pin_tower.svg icon_pin_tower.svg

% c=1 zmv -n '*.(*)' '$(date +"%Y-%m-%d")_VirtualBox_${(l:2::0:)$((c++))}.$1'
mv -- 1.png 2019-09-08_VirtualBox_01.png
mv -- 2.png 2019-09-08_VirtualBox_02.png
mv -- 3.png 2019-09-08_VirtualBox_03.png
mv -- 4.png 2019-09-08_VirtualBox_04.png

補遺