はじめに
バックアップを取るために、複数のファイルを一括でリネームしたいことは、度々あるかと思います。そんなときに便利なコマンドが、renameコマンドです。Linuxには、ファイル名を変更するコマンドとしてmvが標準で入っていますが、mvは1ファイル単位でしかファイル名の変更ができません。複数のファイルに対して一括で変更する場合は、renameを使うことになります。renameコマンドは、Ubuntuにはデフォルトではインストールされていないため、もし、インストールされていなければ、新規にインストールしてください。
注意事項
renameコマンドは使い慣れると便利ですが、使い慣れるまでは、テストフォルダを作成して、自分がやりたいリネームが実現できているか、テストを行ってから、本番環境で実施してください。コマンドを間違って、想定外のファイル名にリネームしてしまった場合、後から手作業で1ファイルづつ元に戻すことになります。ご注意ください。
環境
Ubuntu20.4
インストール
まずは、インストールされているかどうか確認します。
which rename
apt list --installed | grep rename
インストールされていないことが確認できれば、インストールします。
sudo apt-get update
sudo apt-get install rename
正常にインストールされたことを確認します。
which rename
/usr/bin/rename
apt list --installed | grep rename
rename/focal,focal,now 1.10-1 all [installed]
使い方(基礎)
使い方はいたって簡単です。sedコマンドを使ったことがある人であれば分かると思いますが、同じような使い方になります。
renameコマンドの使い方の雛形です。
rename "s/[置き換えたい単語]/[置き換え後の単語]" [ File-Path ]
使い方(準備)
テストファイルを3つ作成します。
touch test{1..3}.txt
空ファイルが3つ作成されました。
test1.txt
test2.txt
test3.txt
使い方(実践)
testをaaaにリネームします。(数字の1桁の部分は?で表しています)
rename "s/test/aaa/" test?.txt
このようにリネームされます。
aaa1.txt
aaa2.txt
aaa3.txt
aaaをtestにリネームします。このようにワイルドカードを使うこともできます。
rename "s/aaa/test/" *.txt
このように元に戻りました。
test1.txt
test2.txt
test3.txt
自分が個人的によく使う、バックアップファイルの命名法です。ファイル名の先頭にアンダーバーを付加しています。**^**は、ファイルの先頭を表しています。
rename "s/^/_/" *.txt
このようにリネームされます。
_test1.txt
_test2.txt
_test3.txt
このようにすれば、元のファイル名に戻せます。変換先に何も指定しなければ、文字を削除することができます。
rename "s/_//" *.txt
このように元に戻りました。
test1.txt
test2.txt
test3.txt
拡張子の後に文字を追加することもできます。拡張子の後にバックアップの意味合いを込めて、bkupの文字を追加しました。**$**は、ファイルの末尾を表しています。
rename "s/$/.bkup/" *.txt
このようにリネームされます。
test1.txt.bkup
test2.txt.bkup
test3.txt.bkup
このようにすれば、元のファイル名に戻せます。つまり、.bkupの文字列を削除しています。
rename "s/.bkup//" *.bkup
このように元に戻りました。
test1.txt
test2.txt
test3.txt
ファイル名の後に、_bkupを付加する場合は、次のようにします。この方法もよくやる、個人的なバックアップの命名法です。
rename "s/.txt/_bkup.txt/" *.txt
このようにリネームされます。
test1_bkup.txt
test2_bkup.txt
test3_bkup.txt
_bkupの文字列を削除してやれば、元のファイル名に戻ります。
rename "s/_bkup//" *.txt
このように元に戻りました。
test1.txt
test2.txt
test3.txt
最後に
確認が終わったら、テストファイルを削除しておきましょう。
rm test{1..3}.txt