Linuxでmvコマンドを使用してファイルの名前を変更する方法をすでに知っていると思います。次の形式で使用するだけです:
mv old_file_name new_file_name
この方法に問題はありません。結局のところ、これが標準的な方法です。
しかし、いくつかのファイルの名前を変更する必要がある状況についてはどうでしょうか。 mvコマンドを1つずつ使用すると、かなりの時間がかかるため、絶対に避けてください。
findexecコマンドオプションをmvコマンドとともに使用して、このプロセスを自動化できます。ただし、正規表現パターンに基づいてファイルの名前を変更するさらに簡単な方法を説明します。
Linuxでコマンドの名前を変更
Perl正規表現形式の特定のパターンに一致するすべてのファイルの名前を変更できるrenameというコマンドラインユーティリティがあります。名前の変更コマンドは、ファイル自体ではなく、ファイル名に対してのみ機能します。
これは、次の構文の名前変更コマンドです。
rename [options] perlexpr [files]
この「名前変更コマンド」には、次のオプションがあります。
- -v:詳細モード。
- -n:アクションなし。名前を変更するファイルを表示しますが、ファイルの名前は変更しないでください。
- -o:上書きなし。既存のファイルを上書きしないでください。
- -f:力。既存のファイルを上書きします。
- -s:シンボリックリンクの名前を変更せず、そのターゲットの名前を変更します
renameコマンドは、mvやcpコマンドのようにLinuxディストリビューションにプリインストールされている標準のユーティリティではないことに注意してください。あなたはそれをインストールしなければならないかもしれません。 UbuntuまたはDebianのsudoユーザーの場合は、次のコマンドを使用して名前変更をインストールできます。
sudo apt install rename
ここで、renameコマンドを使用してファイルの名前を変更する方法を考えている必要があります。このコマンドで時間を大幅に節約できる2つの実用的なシナリオを紹介します。
シナリオ1:Linuxのすべてのファイル名で文字を別の文字に置き換える
複数のファイル名に空白がある場合を想像してみてください。 Linuxでファイル名のスペースを処理するのは悪夢です。これが、経験豊富なユーザーがスペースを含むファイルに名前を付けることがない理由です。
当然、スペースを削除してアンダースコア(_)に置き換えます。ここでは、renameコマンドが非常に便利です。方法を見てみましょう。
現在のディレクトリ内のすべてのファイルの名前のスペースをアンダースコアに置き換えるには、次のようにrenamコマンドを使用するだけです。
rename 's/ /_/g' *
正規表現にリモートで精通している場合でも、s / / _ / gがスペースを検索し、出現するすべてのスペースを_に置き換えていることを理解できます。
興味深い部分はアスタリスク(*)です。アスタリスクは、現在のディレクトリ内の一致するファイルの名前を変更するように指示します。
しかし、サブディレクトリ内の一致するすべてのファイルの名前も変更したい場合はどうでしょうか。その場合、次のように2つのアスタリスクを使用できます。
rename 's/ /_/g' **
シナリオ2:Linuxで一度に複数のファイルの拡張子を変更する
これがあなたのための別のシナリオです。 my_file.xyzのような名前のファイルがいくつかあり、これらのファイルの名前を変更して、my_file.abcのような名前にします。
複数のファイルの拡張子を一度に変更するには、次の方法で名前変更コマンドを使用できます。
rename 's/\.xyz$/.abc/' **
上記のコマンドについて説明します。
‘s /\。xyz$/。abc/’:これは正規表現であり、行末の.xyz文字を.abcに置き換えることを意味します。追加の\は、をエスケープするために使用されます。それ以外の場合は、xyzの前の任意の文字と一致することを意味します。
**は、現在のディレクトリとそのサブディレクトリを調べることを意味します。
名前の変更コマンドは気に入りましたか?
名前の変更コマンドを知っている人はあまりいません。これは、多くのLinuxシステムでrenameが事実上のコマンドではないという事実も原因である可能性があります。
ただし、このコマンドは、複数のファイルの名前変更を同時に処理する場合に非常に便利です。
君はどうでしょう?過去にrenameコマンドを使用したことがありますか?一度に複数のファイルの名前を変更するにはどうすればよいですか?