Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

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 に記載があります。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした