ウェブサイト検索

Linuxでrenameコマンドを使用する方法


重要なポイント

  • 「mv」コマンドはファイルを移動および名前変更するための多目的ツールですが、ファイルの名前変更専用に設計されているわけではありません。
  • 複数のファイルの名前を変更するときは、「mv」を使用するのが複雑で、Bashのコツが必要です。
  • 「mv」の代替は「rename」コマンドであり、ファイルの名前変更作業においてより柔軟性と力を提供します。

Linuxの世界でのファイル名変更の強力なツールを理解し、mvを使わず、自分自身にも休息を与えましょう。Renameは柔軟で速く、時にはさらに簡単です。この強力なコマンドの使い方をご紹介します。

mvには何が問題ですか?

mv に問題はありません。このコマンドはしっかりとした仕事をしますし、すべてのLinuxディストリビューション、macOS、および他のUnix系オペレーティングシステムで見つけることができます。ですから、常に利用可能です。しかし、時にはシャベルではなくブルドーザーが必要なこともあります。

mvコマンドには目的があります。それはファイルを移動することです。既存のファイルを新しい名前の新しいファイルに移動できるというのは幸せな副作用です。その結果、ファイルの名前が変更されるので、私たちの望むものが得られます。しかし、mvは専用のファイル名変更ツールではありません。

Linuxでmvを使って単一のファイルの名前を変更する

mvを使用してファイルの名前を変更するには、mv、スペース、ファイルの名前、スペース、そしてファイルに与えたい新しい名前を入力します。それからEnterを押してください。

ファイルが名前変更されたかどうかを確認するには、lsを使用できます。

mv oldfile.txt newfile.txt
ls *.txt

mvを使って複数のファイルの名前を変更する

複数のファイルの名前を変更しようとすると、状況は厄介になります。mv は複数のファイルを一度に名前変更する機能を持っていません。いくつかの巧妙なBashテクニックを使う必要があります。中程度のコマンドライン操作ができるのなら問題ありませんが、mv を使って複数のファイルの名前を変更する際の複雑さは、単一のファイルの名前を変更する際の簡単さとは大きな対照をなしています。

物事は急速にエスカレートする。

さあ、さまざまな種類のファイルが入ったディレクトリがあるとしましょう。それらのファイルの中には「.prog」拡張子を持つものもあります。コマンドラインでそれらをリネームして「.prg」拡張子にしたいのです。

どうやってmvを使ってそれを実現するのでしょうか?ファイルを見てみましょう。

ls *.prog -l

これが実際のBashスクリプトファイルを書くことに頼らずにそれを行う一つの方法です。

for f in *.prog; do mv -- "$f" "${f%.prog}.prg"; done

うまくいった?ファイルを確認してみましょう。

ls *.pr*

なので、はい、うまくいきました。彼らはすべて「.prg」ファイルになり、ディレクトリ内には「.prog」ファイルはありません。

何が起こったのか?

その長いコマンドは実際に何をしたのか?分解してみましょう。

for f in *.prog; do mv -- "$f" "${f%.prog}.prg"; done

最初の部分は、ディレクトリ内の各 ".prog" ファイルを順番に処理するループを開始します。

次の部分では、処理が何をするかを説明しています。それは、mvを使用して各ファイルを新しいファイルに移動しています。新しいファイルは、元のファイル名から「.prog」部分を除いた名前になります。代わりに「.prg」の新しい拡張子が使用されます。

最後の部分は、各ファイルが処理された後にループを終了します。

Linuxでファイルの名前を変更するにはrenameを使用します

間違いなく、それは rename コマンドです。

`rename`は標準のLinuxディストリビューションに含まれていないため、インストールする必要があります。また、Linuxの異なるファミリーでは異なる名前を持っていますが、すべて同じように動作します。使用しているLinuxのバージョンに応じて、適切なコマンド名に置き換える必要があります。

UbuntuおよびDebian系ディストリビューションでは、renameをこのようにインストールします:

sudo apt-get install rename

FedoraおよびRedHat派生のディストリビューションでは、prenameを次のようにインストールします。最初の「p」に注意してください。これはPerlを表しています。

sudo dnf install prename

Manjaro Linuxにインストールするには、以下のコマンドを使用してください。名前変更コマンドはperl-renameと呼ばれています。

sudo pacman -Syu perl-rename

もう一度やりましょう

そして今回はrenameを使用します。時計を巻き戻して、いくつかの".prog"ファイルを持つことにしましょう。

ls *.prog

次に、これらをリネームするために以下のコマンドを使用しましょう。それが成功したかどうかはlsで確認します。もしUbuntuやDebian系のLinuxを使用していない場合は、renameを適切なコマンド名に置き換えることを忘れないでください。

rename 's/.prog/.prg/' *.prog
ls *.pr*

それはうまくいきました。今はすべて「.prg」ファイルになっており、ディレクトリ内には「.prog」ファイルが残っていません。

今回は何が起こったのですか?

その魔法の部分を3つのパートに分けて説明しましょう。

最初の部分はコマンド名です。rename(またはprename、または他のディストリビューションの場合はperl-rename)。

最後の部分は*.progで、これはrenameにすべての「.prog」ファイルで操作するよう指示します。

中間部分は、各ファイル名に対して実行したい作業を定義します。sは置換を意味します。最初の用語(.prog)は、renameが各ファイル名で検索するもの、2番目の用語(.prg)は、それと置き換えられるものです。

コマンドの中間部分、つまり中央の表現は、Perlの「正規表現」であり、これがrenameコマンドの柔軟性を提供します。

ファイル名の他の部分を変更する

これまでファイル名の拡張子を変更しましたので、ファイル名の他の部分も修正しましょう。

ディレクトリには多くのCソースコードファイルがあります。すべてのファイル名は「slang_」で始まっています。これをlsで確認できます。

ls sl*.c

私たちは「slang_」のすべての出現を「sl_」に置き換えるつもりです。このコマンドの形式はすでに私たちには馴染みがあります。検索語、置換語、ファイルタイプを変更するだけです。

rename 's/slang_/sl_/' *.c

今回は「.c」ファイルを探しており、「slang_」を検索しています。「slang_」がファイル名に見つかった場合、それは「sl_」に置き換えられます。

同じパラメーターで上記のlsコマンドを繰り返すことで、そのコマンドの結果を確認できます。

ls sl*.c

ファイル名の一部を削除する

検索語句を何もないもので置き換えることによって、ファイル名の一部を削除することができます。

ls *.c
rename 's/sl_//' *.c
ls *.c

「ls」コマンドから、私たちの「.c」ファイルはすべて「sl_」で前置きされていることがわかります。それを完全に取り除きましょう。

rename コマンドは以前と同じ形式に従います。私たちは「.c」ファイルを探しています。検索用語は「sl_」ですが、置換用語はありません。間に何もない2つのバックスラッシュは無意味で、空の文字列を意味します。

renameは、各<.c>ファイルを順番に処理します。ファイル名内で"sl_"を検索します。もし見つかれば、何もないもので置き換えられます。言い換えれば、検索用語は削除されます。

2回目のlsコマンドの使用は、すべての「.c」ファイルから「sl_」プレフィックスが削除されたことを確認します。

ファイル名の特定の部分に変更を制限する

ファイル名に「param」という文字列が含まれているファイルを確認するために、lsを使いましょう。それから、renameを使ってその文字列を「parameter」という文字列に置き換えます。その後、lsをもう一度使って、renameコマンドがこれらのファイルに与えた影響を見てみましょう。

ls *param*
rename 's/param/parameter/' *.c
ls *param*

ファイル名に「param」が含まれているファイルが4つ見つかりました。param.c、param_one.c、param_two.cはすべて名前の先頭に「param」が付いています。third_param.cは名前の末尾に「param」が付いていて、拡張子の直前にあります。

このrenameコマンドは、ファイル名のすべての場所で"param"を検索し、すべての場合でそれを"parameter"に置き換えます。

2回目のlsコマンドの使用は、実際に何が起こったのかを示しています。「param」がファイル名の先頭にあったのか、末尾にあったのかに関係なく、それは「parameter」に置き換えられました。

Perlのメタキャラクターを使用して、中間表現の動作を洗練できます。メタキャラクターは、位置や文字の配列を表す記号です。例えば、^は「文字列の開始」を意味し、$は「文字列の終了」を意味し、.は任意の単一の文字(改行文字以外)を意味します。

ファイル名の先頭に制限をかけるために、文字列の開始メタキャラクター(^)を使用します。

ls *param*.c
rename 's/^parameter/value/' *.c
ls *param*.c
ls value*.c

以前に名前を変更したファイルがリストされており、「parameter」という文字列が三つのファイル名の先頭にあり、1つのファイル名の末尾にもあります。

私たちのrenameコマンドは、検索語「parameter」の前に行の先頭メタキャラクタ(^)を使用します。これは、renameに対して、検索語がファイル名の先頭にある場合のみ、見つかったと見なすように指示します。検索文字列「parameter」は、ファイル名の他の場所にある場合は無視されます。

lsを使って確認すると、ファイル名の末尾に「parameter」が付いているファイルは変更されていないが、名前の先頭に「parameter」が付いている3つのファイルは、検索文字列が代替用語「value」に置き換えられていることがわかる。

renameの力はPerlの力にあります。Perlの全ての力があなたの手にあります。

グルーピングでの検索

rename にはさらに多くのトリックがあります。名前に似た文字列を持つファイルがあるケースを考えてみましょう。それらは完全に同じ文字列ではないので、単純な検索と置換はここでは機能しません。

この例では ls を使用して、"str" で始まるファイルがどれかを確認します。それらは string.c と strangle.c の2つです。グルーピングと呼ばれる技法を使用して、両方の文字列を一度に名前変更できます。

このrenameコマンドの中央の表現は、ファイル名の中で文字列「stri」または「stra」があり、それに続いて「ng」が続く文字列を検索します。言い換えれば、私たちの検索用語は「string」と「strang」を探します。置き換え用語は「bang」です。

ls str*.c
rename 's/(stri|stra)ng/bang/' *.c
ls ban*.c

lsを2回目に使用することで、string.cがbang.cに変わり、strangle.cがbangle.cになったことが確認できます。

名前を変更して翻訳を使用する

コマンドrenameは、翻訳と呼ばれるファイル名に対してアクションを実行できます。翻訳の簡単な例は、一連のファイル名を強制的に大文字にすることです。

以下のrenameコマンドでは、中央の表現の始まりにs/を使用していないことに注意してください。代わりにy/を使用しています。これはrenameに対して、置換処理ではなく翻訳処理を行っていることを伝えています。

a-zという用語は、aからzまでのすべての小文字の文字を意味するPerl式です。同様に、A-Zという用語は、AからZまでのすべての大文字の文字を表します。

このコマンドの中心となる表現は、「もしファイル名に小文字のアルファベット a から z が含まれている場合、それをAからZまでの大文字の対応する文字に置き換えよ」と言い換えることができます。

すべての ".prg" ファイルのファイル名を大文字に強制するには、このコマンドを使用します:

ファイルをリネームする: 'y/a-z/A-Z/' *.prg

ls *.PRG

ls コマンドは、すべての ".prg" ファイル名が現在大文字であることを示しています。実際、厳密に言えば、もはや ".prg" ファイルではありません。それらは ".PRG" ファイルです。Linux は大文字と小文字を区別します。

中央の表現におけるとの位置を反転させることで、最後の命令を逆にすることができます。

'y/A-Z/a-z/' を使って *.PRG の名前を変更する

ls *.prg

あなたは5分でPerlを学ばない

Perlを理解することは時間を有効に使うことですが、renameコマンドの時間を節約する能力を利用し始めるためには、多くのPerlの知識は必要なく、力、単純さ、時間において大きな利益を得ることができます。

Linuxコマンド

ファイル

t

プロセス

A

ネットワーキング

netstat・ping・traceroute・ip・ss・whois・fail2ban・bmon・dig・finger・nmap・ftp・curl・wget・who・whoami・w・iptables・ssh-keygen・ufw・arping・firewalld

関連記事: