Linuxでrenameコマンドを使おう

  • 50
    いいね
  • 5
    コメント
この記事は最終更新日から1年以上が経過しています。

ファイル名をリネームするのにはmvでできますが、カレントディレクトリから深いところにあるファイルとかをリネームするとき

mv ./hara/horo/hire/hare/foo.txt ./hara/horo/hire/hare/bar.txt

とかちょっとアレです
そんなときはrenameコマンド
https://wiki.ubuntulinux.jp/UbuntuTips/FileHandling/RenameCommand
UNIXにこのコマンドがないこともあって余り知られていませんが、どのLinuxにも含まれています。・・・とのことです。

rename s/foo/bar/ ./hara/horo/hire/hare/foo.txt

でリネームできます.
なんかmanに書いてあるとおりでは動かなくて、rename perl正規表現 対象ファイルで動きます

このコマンド、perlのスクリプトなんで開いてみると

whereis rename
die "Usage: rename [-v] [-n] [-f] perlexpr [filenames]\n"
    unless GetOptions(
  'v|verbose' => \$verbose,
  'n|no-act'  => \$no_act,
  'f|force'   => \$force,
    ) and $op = shift;

-vオプションが指定できます

じぶんは.bash_profileや.bashrcに書いておきました

alias 'rename'='rename -v'
$ rename s/foo/bar/ foo.txt 
foo.txt renamed as bar.txt

と出力結果を教えてくれます
もちろん本領は正規表現で指定できることでソースのサンプルなんかが参考になります

例えば、.bakという拡張子を全部とるとか
For example, to rename all files matching C<*.bak> to strip the extension,
you might say

  rename 's/\.bak$//' *.bak

大文字を小文字に変えるとか
To translate uppercase names to lower, you'd use

  rename 'y/A-Z/a-z/' *