Linuxでファイル名を変更する方法

Linuxオペレーティングシステムは初めてですか?もしそうなら、ファイルやフォルダの名前を変更するなどの一般的なタスクは、あなたが慣れているものとは異なるかもしれません。しかし心配しないでください。Linuxでのファイル名の変更の概念は、他のオペレーティングシステムでの方法と似ています。

このチュートリアルでは、GUIを使用してLinuxで単一および複数のファイルをリネームする方法について、GUIとターミナルでのコマンド実行の両方を学びます。

さあ始めましょう!

前提条件

このチュートリアルに従うには、次のものが必要です:

  • このチュートリアルではUbuntu 18.04 LTSを使用しますが、他のLinuxディストリビューションでも動作します。
  • sudo/administratorアクセス権を持つアカウント。

ファイルマネージャを使用してLinuxでファイルの名前を変更する

GUIを使用してファイルを管理することに慣れている場合、ファイルマネージャを使用してファイルの名前を変更するこのチュートリアルを始めましょう。GUIファイルマネージャは、ファイルを見ることができるので便利です。Linuxで利用可能なファイルマネージャの一つは、GNOMEの以前のファイルマネージャであるNautilusです。このチュートリアルでは、Nautilusファイルマネージャを使用してファイルの名前を変更する方法を示します。

Linuxの他のファイルマネージャーには、KonquerorDolphinKrusaderThunarNemoファイルマネージャー、Sunflowerファイルマネージャーがあります。これらのファイルマネージャーは同じタスクを実行しますが、ファイルやディレクトリの名前の変更方法は若干異なる場合があります。

ターミナルを起動し、まだインストールされていない場合は、以下のコマンドを実行してNautilusをインストールします(install nautilus)。sudoコマンドは、sudo/管理者権限でコマンドを実行します。

sudo apt install nautilus

単一ファイルの名前変更

Nautilusで単一ファイルの名前変更は、Windowsファイルエクスプローラーと同様に、数回のクリックで行えます。

ファイルを単体でリネームするには、Nautilusを開き、リネームしたいファイルを右クリックし、Renameを選択してください。下図に示すように。

この例ではファイルのリネームに焦点を当てていますが、ファイルとディレクトリの両方をリネームする手順は同じです。

Renaming a Single File

新しいファイル名を入力して元のファイル名を置き換え、Enterキーを押すか、Renameをクリックして完了です。

Entering New File Name

Nautilusファイルマネージャを使用して複数のファイルをリネームする

Windowsと同様に、Ubuntuでは一度に複数のファイルのリネーム方法を選択できます。

複数のファイルをリネームするには、リネームしたいすべてのファイルを選択し、そのうちのいずれかを右クリックし、Renameを選択します。ポップアップウィンドウが表示され、選択したファイルのリネーム方法を選択できます。

Renaming Multiple Files Using Nautilus.

以下には、選択したファイルのリネーム方法に応じて2つのオプションがあります。

  • テンプレートを使用してリネーム – これにより、ファイルを増分でリネームできます。
  • テキストの検索と置換 – ファイル名で特定のテキストを検索して置換できます。

テンプレートを使用したファイルのリネーム

ファイルをテンプレートを使用してリネームするには、テンプレートを使用してリネームオプションを選択します。

空のフィールドに置換名を入力して、+Addボタンをクリックし、テンプレートから選択します。このチュートリアルでは、最初のテンプレート(1,2,3,4)を選択し、Renameをクリックします。このオプションは、置換ファイル名の後に各ファイルに増分番号を追加します(Text1、Text2、…)。

Renaming Files using a Template

ファイル名が変更され、増加する数字に続くTextに変更されました。

Verifying File Names Changed to “Text” with Incrementing Num

ファイル名で単語を検索して置換する

特定のファイル名で複数のファイルの名前を変更するには、テキストの検索と置換オプションを選択します。

既存のテキストフィールドにテキストを入力し、置換するテキストフィールドに置換テキストを入力し、名前を変更をクリックしてテキストを置換します。このオプションは、ファイル名で特定のテキストを検索して置換します。

Replacing Texts in File Names

これで、各ファイル名で単語「Text」が「File」に置換されたことがわかります。

Verifying the word “Text” was replaced with the word “File” on Each File

mvコマンドを使用してファイル名を変更する

GUIではなくコマンドを実行することが好きな場合、ターミナルでファイルの名前を変更する方法を学ぶ準備をしましょう。Linuxターミナルでのファイル名の変更は、PowerShellなどの他のコマンドライン環境での変更と似ています。元のファイル名をターゲットのファイル名に変更するコマンドを実行し、それで終わりです。

ファイル名を変更する場合には2つのシナリオがあります。1つ目は、作業ディレクトリからファイルの名前を変更することです。2つ目は、完全なパスを指定して行います。ファイル名を変更するためのmvコマンドの構文を以下に示します。ここでsourceは元の名前であり、destinationは置換名です。

#作業ディレクトリ内のファイルまたはディレクトリの名前を変更
mv <source> <destination>
#完全なパスを指定してファイルの名前を変更
mv <~/mydir/source> <~/mydir/destination>

mvコマンドを使用して単一のファイルの名前を変更

mvコマンドの構文がまだ頭に残っている状態で、単一のファイルの名前を変更してみましょう。

単一のファイルとディレクトリの名前を変更する方法を示すために、以下の手順を実行します。

1. ターミナルを起動し、以下のコマンドを実行してディレクトリと2つのテキストファイルを作成します。

# ディレクトリ 'test' を作成
mkdir test 
# ~/test に移動
cd test 
# 'file1.txt' と 'file2.txt' のテキストファイルを作成
touch file1.txt file2.txt 

2. 次に、lsコマンドを実行して作業ディレクトリ内のファイルをリストします。下記の例では、file1.txtfile2.txt~/testディレクトリ内に存在することがわかります。

Listing Files in the Working Directory

3. 以下のいずれかのmvコマンドを実行して、file1.txtfile10.txtに名前を変更します。

# 作業ディレクトリ内のファイル名を変更
mv file1.txt file10.txt

# フルパスを指定してファイル名を変更
mv ~/test/file1.txt ~/test/file10.txt

ディレクトリの名前を変更する場合も、次のようにファイル名を変更します:mv ~/test ~/demo~記号はホームディレクトリを示します。

4. 最後に、lsコマンドを再実行して作業ディレクトリ内のファイルをリストします。

下記の例では、file1.txtはfile10.txtに名前が変更されていることがわかります。

Confirming file1.txt is renamed as file10.txt

Forループを使用して複数のファイルの名前を変更する

もし他のタスクで忙しく、一括ですべてのファイルの名前を変更したい場合は、以下のようなforループステートメントを使用する必要があります。

以下のコードをそのままコピーし、ターミナルに貼り付けてEnterキーを押してください。このコードは、作業ディレクトリ内の各テキストファイルをスキャンし、「File」という文字列の後に連番が続く名前に変更します。

# 変数を1で初期化
i=1 
# 作業ディレクトリ内の各テキストファイルをスキャンする
for file in *.txt; 
# すべてのファイルがスキャンされるまで以下のコマンドを繰り返す
do 
  # 各ファイルを「File」と連番 ($i) が続く名前に変更する
	mv -- "$file" "File$i.txt"
  # 変数の現在の数値を1増やす
  i=$((i+1)) 
done

ターミナルにコードを貼り付けることもできますが、良い習慣としては、代わりにスクリプトファイルを作成して実行する方が良いです。

以下では、コードがすべてのファイルの名前を変更する様子が実際に動作しているのが見えます。

Renaming Files with a For Loop

Linuxでのrenameユーティリティを使用したファイルの名前変更

もし日常的に単一のファイルの名前を変更する場合は、mvコマンドで十分です。しかし、一度に同じパターンで複数のファイルの名前を変更したい場合はどうでしょうか? 例えば、特定の単語(ファイル)で始まるファイルの名前を変更する場合です。その場合は、代わりにrenameユーティリティをインストールしてください。

renameユーティリティは複数のファイルの名前を変更し、ファイル名の形式を変更し、ファイルを上書きします。

renameユーティリティをインストールするには、作業しているLinuxディストリビューションに応じて、以下のいずれかのコマンドを実行してください。

# Ubuntu、Debian、Linux Mintのためのaptパッケージマネージャを使用してrenameユーティリティをインストール
sudo apt install rename
# CentOS、Fedora、Red Hatのためのdnfパッケージマネージャを使用してrenameユーティリティをインストール
sudo dnf install prename
# Arch Linux / Manjaro Linuxのためのpacmanパッケージマネージャを使用してrenameユーティリティをインストール
sudo pacman -S perl-rename

以下にrenameコマンドの構文を示します。

rename <options> <perlexpr> <files>

複数のファイルの名前を変更

renameコマンドの構文を考慮すると、同じパターンを持つファイルの名前を変更できます。 renameコマンドの素晴らしい点は、複数のファイルの名前を変更するためにループ関数を宣言する必要がないことです。

おそらく、特定の単語が含まれるファイルの名前を変更したいのでしょう。それであれば、以下のサンプルコマンドの中のPerl正規表現's/file/myfile/')をご覧ください。Perl正規表現は、Perlプログラミング言語に基づいた文字列パターンを定義します。

他のファイルを誤ってリネームしないようにするには、リネーム前に-nオプションを追加して、影響を受けるすべてのファイルをリストアップしてください。

rename -n 's/file/myfile/' *.txt
Listing Affected Files Before Renaming

次に、作業ディレクトリまたは~/test/*.txtディレクトリ内の各テキストファイルの名前に含まれるfileという単語をmyfileに置き換えるために、次のrenameコマンドのいずれかを実行してください。

Perl式('s/file/myfile/')では、sは置換を示しており、ファイルのリネームを意味します。-vオプションが追加されていることに注意してください。これにより、コマンドがどのファイルをリネームしたかが表示されます。

# 作業ディレクトリ内の各ファイルの名前で 'file' を 'myfile' に置換
rename -v 's/file/myfile/' *.txt
# ~/test ディレクトリ内の各ファイルの名前で 'file' を 'myfile' に置換
rename -v 's/file/myfile/' ~/test/*.txt

下の例では、テキストファイル内の各 “file” が “myfile” にリネームされているのが見て取れます。

Renaming a Files with the rename Command

すべてのファイル名を変更する場合は、ファイルパスを指定する際にファイル拡張子を削除してください。例:rename -v 's/file/myfile/' ~/test/*

ファイル拡張子の変更

renameコマンドは、ファイル名だけでなく、ファイル拡張子も変更します。誤った拡張子のファイルを作成したかもしれません。その場合、renameコマンドを実行する際に、変更したいファイル拡張子をPerl式で指定します。

renameコマンドを使用して、~/testディレクトリ内のすべてのファイル(*)の拡張子を.txtから.htmlに変更するには、以下のコマンドを実行します。Perl式の中の$ シンボルは、各ファイル名の文字列の末尾(.txt)に一致し、そのため、コマンドは.txtファイル拡張子のみを変更します。複数のファイル名を変更する場合と同様に、-vオプションを追加して、コマンドが行う変更をリストします。

rename -v 's/.txt$/.html/' *.txt

代わりにすべてのファイル拡張子を削除する場合は、Perl式の置換文字列を削除します。例:rename -v 's/.txt$//' *.txt

以下の画像に示されているように、.txtの拡張子が.htmlに変更されました。

Changing File Extensions from .txt to .html

ファイル名を大文字と小文字に変更する

ファイル拡張子が間違っている代わりに、ファイル名が小文字であるか大文字であるかについて悩んでいるかもしれません。特定のファイルを大文字で検索しようとしているが、ファイル名が小文字であることを知らないかもしれません。

Linuxは大文字と小文字を区別するため、各ファイル名の大文字と小文字を正確に確認しましょう。大文字と小文字の違いは基本的に、小文字と大文字のテキストの区別です。

以下のどちらかのrenameコマンドを実行して、作業ディレクトリ(*)内のすべての小文字(a-z)ファイル名を大文字(A-Z)に変更するか、その逆に変更します。

# ファイル名を小文字から大文字に変更
rename -v 'y/a-z/A-Z/' *
# ファイル名を大文字から小文字に変更
rename -v 'y/A-Z/a-z/' *

以下に、ファイル名の大文字と小文字を変更した結果が示されています。

Changing File Name from Lowercase to Uppercase and Vice Versa

ファイル名内のスペースの置換と削除

ファイル名の大文字と小文字のように、ファイル名にスペースが含まれている場合は、ファイルを見つける際に問題が発生する可能性があります。これを解決するために、スペースを別の文字に置換するか、スペースを完全に削除します。

renameコマンドを以下に実行して、作業ディレクトリ内のすべてのファイル名のスペースをアンダースコア(_)で置換します。アンダースコアはメタキャラクタであるため、バックスラッシュ(\\_)を使用してアンダースコアを文字通りに宣言します。メタキャラクタはコンピュータプログラム内で特別な意味を持つ特別な文字です。

Perlの式の中のgは、コマンドに全ての一致箇所(スペース)を置換するよう指示します。

rename -v 's/ /\\_/g' *

以下では、コマンドが全てのスペースをアンダースコアに置換したことがわかります。

Replacing spaces with underscores in a file name

文字を埋める代わりにファイル名から全てのスペースを削除するには、以下のコマンドを実行してください。

以下のPerlの式では、空白スペース(/ *)の後ろのアスタリスクは、ファイル名内の全てのスペースに一致し、最初の一致箇所だけではありません。置換文字は空(//)なので、renameコマンドは全ての(g)スペースを削除します。

rename -v "s/ *//g" *

以下の結果で、各ファイル名から全てのスペースが削除されていることがわかります。

Removing all spaces in filenames

ファイル名の各単語の最初の文字を大文字にする

ファイル名にスペースを保持し、代わりに各単語の最初の文字を大文字にする場合、より複雑なPerlの式が必要です。以下のサンプルコマンドをご覧ください。

以下のPerlの式では、単語境界(\\b)内のピリオドやアポストロフィ以外の任意の1文字(\\w)に一致します(?<![.'\\''])。renameコマンドはその文字を大文字に変換します(u$&)。

rename -v 's/(?<![.'\\''])\\b\\w*/\\u$&/g' *

以下の結果で、ファイル名の各単語が大文字で始まり、ファイルの拡張子は変更されていないことがわかります。

Capitalizing First Letter of Each Word in File Names

結論

このチュートリアルを通じて、GUIとコマンドラインターミナルを使用してLinuxファイルの名前を変更するさまざまな方法を学びました。今や、1つまたは複数のファイルの名前を操作する方法について確固たる理解があります。

なぜLinuxシェルスクリプトを学んで、Linuxでファイルの名前を自動で変更するスクリプトを作成しないのですか?

Source:
https://adamtheautomator.com/rename-files-in-linux/