59
56

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

zshAdvent Calendar 2012

Day 16

zmvコマンドで複数ファイルの一括リネーム

Posted at

zsh には、zmv という便利なコマンドがあります。この使い方をまとめます。

基本の使い方

zmv '変換元' '変換先'

変換元には、zsh の glob パターンが指定できます。

例えば、次のように使います。

zmv '(*).xxx' '$1.yyy'

このコマンドは、実際には次のようなコマンドを実行してくれます(マッチするファイルが3つあった場合の例)。

mv -- hoge1.xxx hoge1.yyy
mv -- hoge2.xxx hoge2.yyy
mv -- hoge3.xxx hoge3.yyy

別の例として、次のように複数パターンの指定も可能です。

zmv '(**/)(*).xxx' '$1$2.yyy'

より簡単に使うためのオプション

次のオプションを使うと、より簡潔に書けて便利です。

  • -W : 変換元に含まれるワイルドカードは括弧がついているとみなす。また、変換先に含まれるワイルドカードは順に $1, $2, ... とみなす。

これを使うと、上に出てきた例は次のように書けます。

zmv -W '*.xxx' '*.yyy'
zmv -W '**/*.xxx' '**/*.yyy'

さらに、noglob を使うと、シングルクォートも省略できます。
次のようなエイリアスを定義すると便利です。

alias rename="noglob zmv -W"

こうすると、次のように直観的に書けます。

rename *.xxx *.yyy
rename **/*.xxx **/*.yyy

僕は、簡単な変換の場合は rename を使い、複雑な変換の場合は zmv を生で使う、と使い分けています。

確認用のオプション

複雑な変換の場合は、パターンが正しく指定できているか確認できるような、次のオプションが便利です。

  • -n : 処理の表示のみ行い、実際には実行しません。
  • -v : 処理を表示しながら実行します。
  • -i : 対話的に実行します。

リネーム以外の処理を行う

実は、リネーム以外の処理を行うこともできます。

  • -C : mv の代わりに cp を実行します。
  • -L : mv の代わりに ln を実行します。
  • -p コマンド : mv の代わりに指定したコマンドを実行します。

参照

zmv については、man zshcontrib の OTHER FUNCTIONS に記載があります。

59
56
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
59
56

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?