「zsh 複数のファイルをzmvで一括リネームする」の版間の差分

提供: FreeBSD入門
移動: 案内検索
(ページの作成:「ファイル名の変更でスクリプトを書いたりすることもあるかと思いますが、zshでは、zmvを用いることで、ファイル名の一括...」)
 
(相違点なし)

2015年5月2日 (土) 22:22時点における最新版

ファイル名の変更でスクリプトを書いたりすることもあるかと思いますが、zshでは、zmvを用いることで、ファイル名の一括リネームを簡単に行えます。一気に拡張子を変更するようなことが簡単にできます。

読み方

zmv
ぜっと えむぶい

概要

zmv でファイルの一括リネームやバックアップ(コピー)、シンボリックリンク作成などが行えます。

設定

.zshrc

autoload -Uz zmv

使い方

コマンドラインオプション

zmvのコマンドラインオプションは、以下の通りです。

Usage:
  zmv [OPTIONS] oldpattern newpattern
where oldpattern contains parenthesis surrounding patterns which will
be replaced in turn by $1, $2, ... in newpattern.  For example,
  zmv '(*).lis' '$1.txt'
renames 'foo.lis' to 'foo.txt', 'my.old.stuff.lis' to 'my.old.stuff.txt',
and so on.  Something simpler (for basic commands) is the -W option:
  zmv -W '*.lis' '*.txt'
This does the same thing as the first command, but with automatic conversion
of the wildcards into the appropriate syntax.  If you combine this with
noglob, you don't even need to quote the arguments.  For example,
  alias mmv='noglob zmv -W'
  mmv *.c.orig orig/*.c

拡張子を変更する方法

拡張子を .htm から .html に一括で変更します。

zmv -W '*.htm' '*.html'

avi から mp4 に変更してみる例です。

zmv -W '*.avi' '*.mp4'

foo-2015-05-01.txt のようなファイル名を foo-2015.05.01.txt にリネームする例です。

zmv 'foo-(*)-(*)-(*).txt' 'foo-$1.$2.$3.txt'

-w オプションでもっと簡単にできます。

zmv 'foo-*-*-*.txt' 'foo-$1.$2.$3.txt'

-W オプションでさらに簡単にできます。

zmv 'foo-*-*-*.txt' 'foo-$1.$2.$3.txt'
zmv 'foo-*-*-*.txt' 'foo-*.*.*.txt'

$1,$2 のような前方参照は、$1と$2を入れ替えるような並び替えの時は必要です。

zmv 'foo-*-*.txt' 'foo-$2-$1.txt'

リネームする前に確認する

zmv でいきなりリネームしてしまって、取り返しがつかなくなる前に、-n オプションでどうなるのか確認することができます。

zmv -n '*.txt' 'foo-*.txt'

ファイルの拡張子を.cpp から .cc に変更する前に、確認する例です。

$ zmv -W -n '*.cpp' '*.cc'
mv -- auto1.cpp auto1.cc
mv -- auto2.cpp auto2.cc
mv -- auto3.cpp auto3.cc
mv -- for.cpp for.cc
mv -- vector_for_int.cpp vector_for_int.cc

mvの代わりにcpする

まるごとバックアップしたいときに利用します。

zmv -C -W '*.txt' '*.txt.ORG'

シンボリックリンクを作成する

Dropbox などで .files を共有するときに使える例です。

zmv -L -s -W 'Dropbox/dotfiles/.*' '.*'

dot.zshrc というような名前の場合は、.zshrc としてシンボリックリンクを作成します。

zmv -L -s -W 'Dropbox/dotfiles/dot.*' '.*'

拡張子を取る方法

ファイル名から拡張子を取り外す例です。a.txt が a になります。

zmv '*.txt' '*'

関連項目