名前の変更–Linuxで複数のファイルの名前を変更するためのコマンドラインツール


Linuxでは、「mv」コマンドを使用して単一のファイルの名前を変更することがよくあります。ただし、複数またはグループのファイルの名前をすぐに変更すると、端末での作業が非常に困難になります。

Linuxには、renameと呼ばれる非常に強力な組み込みツールが付属しています。名前の変更コマンドは、複数またはグループのファイルの名前を変更したり、ファイルの名前を小文字に変更したり、ファイルの名前を大文字に変更したり、perl式を使用してファイルを上書きしたりするために使用されます。

「rename」コマンドはPerlスクリプトの一部であり、多くのLinuxディストリビューションの「/ usr/bin /」の下にあります。 「which」コマンドを実行して、renameコマンドの場所を見つけることができます。

$ which rename
/usr/bin/rename
rename 's/old-name/new-name/' files

名前の変更コマンドには、実際の作業を行うために名前の変更コマンドをガイドする必須のperl式とともに、いくつかのオプションの引数が付属しています。

rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]
  1. -v: Print names of files successfully renamed.
  2. -n: Show what files would have been renamed.
  3. -f: Force overwrite existing files.
  4. perlexpr: Perl Expression.

このユーティリティをよりよく理解するために、この記事ではこのコマンドのいくつかの実用的な例について説明しました。

1.基本的な名前変更コマンドの例

拡張子が「.html」のファイルがたくさんあり、すべての「.html」ファイルの名前を一度に「.php」に変更するとします。たとえば、最初に「ls -l」を実行して、拡張子が「.html」のファイルのリストを確認します。

# [email protected]:~$ 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」コマンドを使用できます。

[email protected]:~$ rename 's/\.html$/\.php/' *.html

注:上記のコマンドでは、2つの引数を使用しました。

  1. First argument is a perl expression that substitute .html with .php.
  2. Second argument tells the rename command to substitute all the files with *.php.

プロンプトでls-lを実行して、すべてのファイルの名前が「.php」拡張子に変更されているかどうかを確認しましょう。

[email protected]:~$ 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.名前変更コマンドを実行する前に変更を確認します

重要または主要な名前変更タスクを実行している間、「-n」引数を指定してrenameコマンドを実行することにより、いつでも変更を確認できます。 「-n」パラメーターは、どのような変更が行われるかを正確に示しますが、変更は実際には行われません。以下はコマンドの例です。

[email protected]:~$ 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.名前変更出力の印刷

名前の変更コマンドには、変更に関する情報が表示されないことがわかりました。したがって、名前変更コマンドの詳細を取得する場合(「-n」オプションを使用した場合のように)、ここでは「-v」オプションを使用して、名前変更コマンドによって正常に行われたすべての変更の完全な詳細を出力します。

[email protected]:~$ 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.すべての小文字を大文字とその逆に変換します-Versa

小文字の名前を持つすべてのファイルの名前を大文字にバッチ変更します。たとえば、次のすべてのファイルを小文字から大文字に変換したいと思います。

[email protected]:~$ 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式で次のコマンドを使用してください。

[email protected]:~$ rename 'y/a-z/A-Z/' *.html

上記のコマンドを実行したら、「ls-l」を実行して変更を確認できます。

[email protected]:~$ 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拡張子付き)の名前を大文字に変更したことがわかります。

同様に、次のコマンドを使用して、すべての大文字を小文字に変換することもできます。

[email protected]:~$ rename 'y/A-Z/a-z/' *.HTML
[email protected]:~$ 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」オプションを使用します。

[email protected]:~$ rename -f 's/a/b/' *.html

名前の変更コマンドについて詳しく知りたい場合は、ターミナルに「manrename」と入力してください。

コマンドラインからファイルの複数またはバッチの名前変更を処理する場合、renameコマンドは非常に便利です。試してみて、ファイルの名前変更に関してどれだけ役立つかを教えてください。