Rename – Linux で複数のファイルの名前を変更するためのコマンドライン ツール
Linux では、単一のファイルの名前を変更するために「mv」コマンドをよく使用します。ただし、複数のファイルまたはグループのファイルの名前を迅速に変更することは、端末で非常に困難な作業になります。
Linux には、名前変更 と呼ばれる非常に強力な組み込みツールが付属しています。 名前変更 コマンドは、複数またはグループのファイルの名前を変更したり、ファイル名を小文字に変更したり、ファイル名を大文字に変更したり、Perl 式を使用してファイルを上書きしたりするために使用されます。
「名前変更」コマンドはPerlスクリプトの一部であり、多くのLinuxディストリビューションでは「/usr/bin/」の下にあります。 「どれ」コマンドを実行して、名前変更コマンドの場所を確認できます。
$ which rename /usr/bin/rename
Renameコマンドの基本構文
rename 's/old-name/new-name/' files
rename コマンドには、実際の作業を行うように rename コマンドをガイドする必須のPerl 式に加えて、いくつかのオプションの引数が付属しています。
rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]
- -v: 名前が正常に変更されたファイルの名前を出力します。
- -n: どのファイルの名前が変更されるかを表示します。
- -f: 既存のファイルを強制的に上書きします。
- perlexpr: Perl 式。
このユーティリティをより深く理解するために、この記事ではこのコマンドの実践的な例をいくつか説明しました。
1. 基本的な名前変更コマンドの例
「.html」拡張子を持つファイルが多数あり、すべての「.html」ファイルの名前を「.php」に変更するとします。一気に。たとえば、最初に「ls -l」を実行して、「.html」拡張子を持つファイルのリストを確認します。
# :~$ ls -l total 22532 -rw-rw-r-- 1 ravisaive ravisaive 6888896 Oct 10 12:10 cricket.html -rw-rw-r-- 1 ravisaive ravisaive 588895 Oct 10 12:10 entertainment.html -rw-rw-r-- 1 ravisaive ravisaive 6188895 Oct 10 12:10 health.html -rw-rw-r-- 1 ravisaive ravisaive 6538895 Oct 10 12:10 lifestyle.html -rw-rw-r-- 1 ravisaive ravisaive 938895 Oct 10 12:10 news.html -rw-rw-r-- 1 ravisaive ravisaive 938937 Oct 10 12:11 photos.html -rw-rw-r-- 1 ravisaive ravisaive 978137 Oct 10 12:11 sports.html
ここで、これらすべてのファイルの拡張子を「.html」から「.php」に変更します。以下に示すように、perl 式を使用して「名前変更」コマンドを使用できます。
:~$ rename 's/\.html$/\.php/' *.html
注: 上記のコマンドでは 2 つの引数を使用しました。
- 最初の引数は、.html を .php に置き換える perl 式です。
- 2 番目の引数は、名前変更コマンドにすべてのファイルを *.php に置き換えるよう指示します。
プロンプトで ls -l を実行して、すべてのファイルの名前が「.php」拡張子に変更されたかどうかを確認してみましょう。
:~$ ls -l total 22532 -rw-rw-r-- 1 ravisaive ravisaive 6888896 Oct 10 12:10 cricket.php -rw-rw-r-- 1 ravisaive ravisaive 588895 Oct 10 12:10 entertainment.php -rw-rw-r-- 1 ravisaive ravisaive 6188895 Oct 10 12:10 health.php -rw-rw-r-- 1 ravisaive ravisaive 6538895 Oct 10 12:10 lifestyle.php -rw-rw-r-- 1 ravisaive ravisaive 938895 Oct 10 12:10 news.php -rw-rw-r-- 1 ravisaive ravisaive 938937 Oct 10 12:11 photos.php -rw-rw-r-- 1 ravisaive ravisaive 978137 Oct 10 12:11 sports.php
上で、すべての html ファイルの名前が php に変更されたことがわかります。
2. Renameコマンドを実行する前に変更を確認する
重要または主要な名前変更タスクを実行しているときは、「-n」引数を指定して rename コマンドを実行することで、いつでも変更を確認できます。 「-n」パラメータは、どのような変更が行われるかを正確に示しますが、変更は実際には行われません。ここでは、以下のコマンドの例を示します。
:~$ rename -n 's/\.php$/\.html/' *.php cricket.php renamed as cricket.html entertainment.php renamed as entertainment.html health.php renamed as health.html lifestyle.php renamed as lifestyle.html news.php renamed as news.html photos.php renamed as photos.html sports.php renamed as sports.html
注: 上記のコマンド出力では変更が表示されるだけですが、「-n」スイッチなしでコマンドを実行しない限り、実際には変更は行われません。
3.名前変更出力の印刷
rename コマンドでは、変更の情報が表示されないことがわかりました。したがって、(「-n」オプションを使用した場合と同様に) 名前変更コマンドの詳細を取得したい場合は、ここでは「-v」オプションを使用して完全なコマンドを出力します。 rename コマンドによって正常に行われたすべての変更の詳細。
:~$ rename -v 's/\.php$/\.html/' *.php cricket.php renamed as cricket.html entertainment.php renamed as entertainment.html health.php renamed as health.html lifestyle.php renamed as lifestyle.html news.php renamed as news.html photos.php renamed as photos.html sports.php renamed as sports.html
4. すべての小文字を大文字に、またはその逆に変換します
小文字の名前を持つすべてのファイルの名前を大文字にバッチ変更するには。たとえば、次のすべてのファイルを小文字からに変換したいと考えています。 > 大文字です。
小文字から大文字へ
:~$ ls -l total 22532 -rw-rw-r-- 1 ravisaive ravisaive 6888896 Oct 10 12:10 cricket.html -rw-rw-r-- 1 ravisaive ravisaive 588895 Oct 10 12:10 entertainment.html -rw-rw-r-- 1 ravisaive ravisaive 6188895 Oct 10 12:10 health.html -rw-rw-r-- 1 ravisaive ravisaive 6538895 Oct 10 12:10 lifestyle.html -rw-rw-r-- 1 ravisaive ravisaive 938895 Oct 10 12:10 news.html -rw-rw-r-- 1 ravisaive ravisaive 938937 Oct 10 12:11 photos.html -rw-rw-r-- 1 ravisaive ravisaive 978137 Oct 10 12:11 sports.html
次のコマンドを Perl 式で使用してください。
:~$ rename 'y/a-z/A-Z/' *.html
上記のコマンドを実行したら、「ls -l」を実行して変更を確認できます。
:~$ ls -l total 22532 -rw-rw-r-- 1 ravisaive ravisaive 6888896 Oct 10 12:10 CRICKET.HTML -rw-rw-r-- 1 ravisaive ravisaive 588895 Oct 10 12:10 ENTERTAINMENT.HTML -rw-rw-r-- 1 ravisaive ravisaive 6188895 Oct 10 12:10 HEALTH.HTML -rw-rw-r-- 1 ravisaive ravisaive 6538895 Oct 10 12:10 LIFESTYLE.HTML -rw-rw-r-- 1 ravisaive ravisaive 938895 Oct 10 12:10 NEWS.HTML -rw-rw-r-- 1 ravisaive ravisaive 938937 Oct 10 12:11 PHOTOS.HTML -rw-rw-r-- 1 ravisaive ravisaive 978137 Oct 10 12:11 SPORTS.HTML
上記のコマンドにより、実際にすべての小文字のファイル名 (.HTML 拡張子付き) が大文字に変更されたことがわかります。
大文字から小文字へ
同様に、次のコマンドを使用して、 すべての大文字を小文字に変換することもできます。
:~$ rename 'y/A-Z/a-z/' *.HTML
:~$ ls -l total 22532 -rw-rw-r-- 1 ravisaive ravisaive 6888896 Oct 10 12:10 cricket.html -rw-rw-r-- 1 ravisaive ravisaive 588895 Oct 10 12:10 entertainment.html -rw-rw-r-- 1 ravisaive ravisaive 6188895 Oct 10 12:10 health.html -rw-rw-r-- 1 ravisaive ravisaive 6538895 Oct 10 12:10 lifestyle.html -rw-rw-r-- 1 ravisaive ravisaive 938895 Oct 10 12:10 news.html -rw-rw-r-- 1 ravisaive ravisaive 938937 Oct 10 12:11 photos.html -rw-rw-r-- 1 ravisaive ravisaive 978137 Oct 10 12:11 sports.html
5. ファイル名の最初の文字を大文字にする
各ファイル名の最初の文字のみを大文字にするには、次のコマンドを使用します。
# rename 's/\b(\w)/\U$1/g' *.ext

6. 既存のファイルを上書きする
既存のファイルを強制的に上書きする場合は、以下に示すように「-f」オプションを使用します。
:~$ rename -f 's/a/b/' *.html
rename コマンドについて詳しく知りたい場合は、ターミナルに「man rename」と入力してください。
名前変更 コマンドは、コマンド ラインから複数のファイル名またはバッチ名を変更する場合に非常に便利です。ぜひ試してみて、ファイルの名前変更に関してどの程度役立つか教えてください。