Ubuntuのファイル名置換は、少しだけクセがあるのでまとめました。
Ubuntu以外のOSはこちら。
rename コマンドをインストール
sudo apt-get install rename
ファイル名の変更
単語の置き換え
rename "s/[置き換えたい単語]/[置き換え後の単語]" [ File-Path ]
# 処理結果を表示したい場合
rename -v "s/[置き換えたい単語]/[置き換え後の単語]" [ File-Path ]
"s/[置き換えたい単語]/[置き換え後の単語]"
の部分は、 perl
や sed
での置換と同じです。
fileA.sh
を fileB.sh
に置き換えるときは以下のようになります。
# `fileA.sh' renamed as `fileB.sh'
rename "s/A/B/" fileA.sh
ワイルドカードで一括置換
ワイルドカードだと予期せぬファイルまでファイル名が変わってしまう可能性があるので、利用する際は必ずテスト環境などでお試しください。
拡張子で指定
rename "s/file/test/" *.sh
前後の文字列が一致するものを指定
rename "s/file/test/" file*.sh
特定のファイルのみ操作するとき
ファイル名を複数指定
# `fileA.sh' renamed as `A.sh'
# `fileB.sh' renamed as `B.sh'
# `fileC.sh' renamed as `C.sh'
rename "s/file//" fileA.sh fileB.sh fileC.sh
特定ワードを含むファイルのみ操作
ls | grep -v / | grep -e file | rename -v "s/file//"
先頭に特定ワードを含むファイルのみ操作
ls | grep -v / | grep -e "file*" | rename -v "s/file//"
特定ワードと、拡張子のファイルを操作
ls | grep -v / | grep -e "file" --include "*.sh" | rename -v "s/file//"
ファイル名の前後に文字列追加
ファイル名の前に文字を追加
# `A.sh' renamed as `fileA.sh'
rename "s/^/file/" A.sh
拡張子の後に文字を追加
# `fileA.sh' renamed as `fileA.sh.old'
rename "s/$/.old/" A.sh
ファイル名の後に文字列を追加
(.sh
が拡張子以外では使われていないときのみ)
# `A.sh' renamed as `A_file.sh'
rename "s/.sh/_file.sh/" A.sh
正規表現を用いた置き換え
Ubuntuでは、 rename
コマンドで正規表現も利用できます。
こちらのブログ様が詳しかったのでオススメです。
# すべて小文字にする
rename 'y/A-Z/a-z/' *