mv filename.{old,new} とは?

Linuxで使えるクレージーな小技コマンドいろいろ | IDEA*IDEA


mv filename.{old,new}
mvの機能だと勘違いする人がいるかも知れないので補足。
{}にカンマ区切りの文字列を入れとくと、シェルが{}前後の文字列をくっつけながら展開してくれるのです。ファイル名とか関係なく。

$ echo {a,b,c}
a b c

$ echo ^{a,b,c}$
^a$ ^b$ ^c$

スペースを入れると展開されないので

$ echo ^{a, b ,c}$
^{a, b ,c}$

その場合はエスケープすると良い。

$ echo ^{a,\ b\ ,c}$
^a$ ^ b $ ^c$

mv以外にも色々応用できますね!



例えば、

$ echo /usr/{local/,}bin/

とすると、

$ echo /usr/{local/,}bin/
/usr/local/bin/ /usr/bin/

と展開されるので、

$ echo /usr/{local/,}bin/perl*

のようにすれば、/usr/binと/usr/local/binに入ってる"perl"で始まるファイルの一覧を取得できます。

$ echo /usr/{local/,}bin/perl*
/usr/local/bin/perl /usr/local/bin/perl5.12.2 /usr/local/bin/perlbug /usr/local/bin/perldoc /usr/local/bin/perlivp /usr/local/bin/perlthanks /usr/bin/perl /usr/bin/perl5.8.8 /usr/bin/perlbug /usr/bin/perlcc /usr/bin/perlcritic /usr/bin/perldoc /usr/bin/perlivp /usr/bin/perltidy

便利だね!