Edited at

複数ファイルの名前をまとめて変更する

More than 5 years have passed since last update.

Linux/Mac で複数ファイルをリネームする場合 rename コマンドとかリネームソフト使うって手もありますがZsh使いなら zmv ですよねってことで man zsh-lovers からよく使うものをまとめてみました。


zmv-examples.sh

## 準備

# zmv を使用する前には `autoload zmv` する必要がある
# `man zshexpn` の PARAMETER EXPANSION とかも見ておくと捗る
# zmv の使用例については `man zsh-lovers` にたくさんあります

## 便利なオプション
## zmv のオプションについては `man zshcontrib` で調べることができる。
# zmv -n (実際にリネームする前に結果を確認)
zmv -n '*' '$f[5,-1]' # 例は頭4文字削除
# zmv -W ('(*)' '$1' を '*' で済ませられる)
zmv -W '*.sh' '*.pl' # 例は拡張子の変更
zmv '(*).sh' '$1.pl' # -W を使用しなかった場合

## ファイル名の一部を置換したい時
# 例) "file-hell.name" -> "file-heaven.name"
zmv '(*)hell(*)' '${1}heaven${2}'
# もしくは
zmv '*' '$f:s/hell/heaven/'

## 括弧の除去
# 例) foo-(bar).avi -> foo-bar.avi
zmv '*' '${f//[()]/}'

## 連番リネーム
# 例) foo.jpg > 1.jpg, fnord.jpg > 2.jpg, ..
c=1 zmv '*.jpg' '$((c++)).jpg'

## 連番リネーム(0埋め3桁)
# 例) foo.jpg > 001.jpg, fnord.jpg > 002.jpg, ..
c=1; zmv '*.jpg' '${(l:3::0:)$((c++))}.$1'

## 連番ファイルを0埋め桁揃え
# 例) 1.jpg -> 001.jpg, 2.jpg -> 002.jpg, ..
zmv '(<1->).jpg' '${(l:3::0:)1}.jpg'
# 例) pic1.jpg -> pic0001.jpg, pic2.jpg -> pic0002.jpg, ..
zmv 'pic(*).jpg' 'pic${(l:4::0:)1}.jpg'

## 拡張子をすべて小文字に揃える
# 例) 001.JPG > 001.jpg, 002.Jpg > 002.jpg, ..
zmv '(*).(#i)jpg' '$1.jpg'

## スペースをハイフンに置換
# 例) foo bar baz.txt -> foo-bar-baz.txt
zmv '* *' '$f:gs/ /-'

## 小文字/大文字 に統一
zmv '(*)' '${(L)1}' # 小文字
zmv '(*)' '${(U)1}' # 大文字