[Shell] zsh の zmv でファイル名を一括で変更する
それ zsh でできるよ的なものを見つけたので memo.
@mollifier さんのブログと Twitter で、zsh と metal の勉強をいつもさせて頂いている。
Contents
設定
~/.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