重要なポイント
- 「mv」コマンドは、ファイルの移動や名前変更を行うための多用途ツールですが、ファイル名の変更専用に設計されたものではありません。
- 複数のファイルの名前を変更する場合、「mv」の使用は複雑になる可能性があり、Bash のテクニックが必要です。
- 「mv」の代わりに「rename」コマンドを使用すると、ファイル名変更タスクの柔軟性と機能が向上します。
Linux 界のファイル名変更の強力な機能を理解し、
mv
とあなた自身に休息を与えましょう。
Rename
柔軟かつ高速で、場合によってはさらに簡単です。この強力なコマンドを使用する方法は次のとおりです。
MVの何が問題なの?
mv
には何も問題はありません。このコマンドは
素晴らしい仕事
をし、すべての Linux ディストリビューション、macOS、およびその他の Unix 系オペレーティング システムに含まれています。したがって、いつでも利用可能です。しかし、シャベルではなくブルドーザーだけが必要な場合もあります。
mv
コマンドにはファイルを移動するという目的があります。これは、既存のファイルを新しい名前の新しいファイルに移動するために使用できるという嬉しい副作用です。最終的な効果はファイルの名前を変更することで、必要なものが得られます。ただし、
mv
専用のファイル名変更ツールではありません。
Linux 上の mv を使用して単一ファイルの名前を変更する
mv
を使用してファイルの名前を変更するには、
mv
、スペース、ファイル名、スペース、およびファイルに付ける新しい名前を入力します。次に Enter を押します。
ls
を使用して、ファイルの名前が変更されたことを確認できます。
mv 古いファイル.txt 新しいファイル.txt
ls *.txt
mv を使用して複数のファイルの名前を変更する
複数のファイルの名前を変更する場合は、さらに複雑になります。
mv
複数のファイルの名前変更を処理する機能がありません。 Bash の気の利いたトリックを使用する必要があります。中級レベルのコマンドラインを知っていればそれでも問題ありませんが、
mv
を使用して複数のファイルの名前を変更する複雑さは、
mv
を使用して単一のファイルの名前を変更する簡単さとは対照的です。
事態は急速にエスカレートします。
さまざまなタイプのさまざまなファイルが含まれるディレクトリがあるとします。これらのファイルには「.prog」拡張子が付いているものもあります。コマンドラインでそれらの名前を変更して、拡張子が「.prg」になるようにしたいと思います。
mv
どのようにしてそれを実行できるようにするのでしょうか?ファイルを見てみましょう。
ls *.prog -l
実際の Bash スクリプト ファイルを作成することに頼らない方法の 1 つを次に示します。
*.prog の f について; do mv -- "$f" "${f%.prog}.prg";終わり
それはうまくいきましたか?ファイルを確認してみましょう。
ls *.pr*
はい、うまくいきました。現在、それらはすべて「.prg」ファイルであり、ディレクトリには「.prog」ファイルはありません。
今何があったの?
その長いコマンドは実際には何をしたのでしょうか?分解してみましょう。
*.prog の f について; do mv -- "$f" "${f%.prog}.prg";終わり
最初の部分は、ディレクトリ内の各 “.prog” ファイルを順番に処理するループを開始します。
次の部分では、処理が何を行うかを示します。
mv
を使用して各ファイルを新しいファイルに移動します。新しいファイルには、元のファイルの「.prog」部分を除いた名前が付けられます。代わりに、新しい拡張子「.prg」が使用されます。
最後の部分は、各ファイルが処理された後にループを終了します。
Linux でファイルの名前を変更するには rename を使用します
確実に。
rename
コマンドです。
rename
標準の Linux ディストリビューションには含まれていないため、インストールする必要があります。また、Linux ファミリによっては名前が異なりますが、すべて同じように動作します。使用している Linux の種類に応じて、適切なコマンド名を置き換える必要があります。
Ubuntu および Debian 派生ディストリビューションをインストールする場合は、次のように
rename
。
sudo apt-get install 名前の変更
Fedora および RedHat 由来のディストリビューションでは、次のように
prename
をインストールします。最初の「p」は Perl を表します。
sudo dnf インストールのプレネーム
Manjaro Linux にインストールするには、次のコマンドを使用します。名前変更コマンドは
perl-rename
と呼ばれることに注意してください。
sudo pacman -Syu perl-rename
もう一度やりましょう
そして今回は
rename
使用します。時計をロールバックして、「.prog」ファイルのセットを作成します。
ls *.prog
次に、次のコマンドを使用して名前を変更しましょう。次に、
ls
でそれが機能したかどうかを確認します。 Ubuntu または Debian 派生 Linux を使用していない場合は、必ず
rename
Linux の適切なコマンド名に置き換えてください。
's/.prog/.prg/' *.prog の名前を変更します
ls *.pr*
これはうまくいき、現在はすべて「.prg」ファイルになり、ディレクトリには「.prog」ファイルは残りません。
今回は何が起こったのでしょうか?
そのちょっとした魔法を 3 つのパートに分けて説明しましょう。
最初の部分はコマンド名
rename
(他のディストリビューションの場合は
prename
または
perl-rename
) です。
最後の部分は
*.prog
で、すべての “.prog” ファイルを操作するように
rename
指示します。
中央の部分では、各ファイル名に対して実行する作業を定義します。
s
代替を意味します。最初の用語 (
.prog
) は
rename
が各ファイル名で検索するもので、2 番目の用語 (
.prg
) は置換されるものです。
コマンドの中間部分、つまり中心となる式は Perl の「
正規表現
」であり、これによって
rename
コマンドに柔軟性が与えられます。
ファイル名の他の部分の変更
ここまででファイル名の拡張子を変更しました。ファイル名の他の部分も修正してみましょう。
このディレクトリには、多数の C ソース コード ファイルがあります。すべてのファイル名には「slang_」という接頭辞が付きます。これは
ls
で確認できます。
ls sl*.c
すべての「slang_」を「sl_」に置き換えます。コマンドの形式はすでによく知られています。検索語、置換語、ファイルの種類を変更しているだけです。
's/slang_/sl_/' *.c の名前を変更します
今回は「.c」ファイルを探し、「slang_」を検索します。ファイル名に「slang_」が見つかると、「sl_」に置き換えられます。
同じパラメータを使用して上記の
ls
コマンドを繰り返すことで、そのコマンドの結果を確認できます。
ls sl*.c
ファイル名の一部を削除する
検索語を何も置き換えることで、ファイル名の一部を削除できます。
ls *.c
's/sl_//' *.c の名前を変更します
ls *.c
ls
コマンドから、「.c」ファイルにはすべて先頭に「sl_」が付いていることがわかります。それを完全に取り除きましょう。
rename
コマンドは以前と同じ形式に従います。 「.c」ファイルを探します。検索語は「sl_」ですが、置換語はありません。間に何もない 2 つのバックスラッシュは何も意味せず、空の文字列です。
rename
各「.c」ファイルを順番に処理します。ファイル名で「sl_」を検索します。見つかった場合は何も置き換えられません。つまり、検索語が削除されます。
ls
コマンドを 2 回目に使用すると、すべての「.c」ファイルから「sl_」プレフィックスが削除されたことが確認されます。
ファイル名の特定の部分への変更を制限する
ls
を使用して、ファイル名に文字列「param」が含まれるファイルを見てみましょう。次に、
rename
使用してその文字列を文字列「parameter」に置き換えます。もう一度
ls
使用して、
rename
コマンドがこれらのファイルに与えた影響を確認します。
ls *パラメータ*
's/param/parameter/' *.c の名前を変更します
ls *パラメータ*
ファイル名に「param」を含むファイルが 4 つ見つかります。 param.c、param_one.c、および param_two.c はすべて、名前の先頭に「param」が付いています。 third_param.c には、名前の末尾、拡張子の直前に「param」が付いています。
rename
コマンドは、ファイル名のあらゆる場所で「param」を検索し、すべての場合に「parameter」に置き換えます。
ls
コマンドを 2 回目に使用すると、まさにそれが起こったことがわかります。 「param」がファイル名の先頭であっても末尾であっても、「parameter」に置き換えられました。
Perl のメタキャラクターを使用して、中間の式の動作を調整できます。メタキャラクターは、文字の位置または順序を表す記号です。たとえば、
^
「文字列の先頭」を意味し、
$
「文字列の末尾」を意味します
.
任意の単一文字 (改行文字は除く) を意味します。
文字列の先頭メタキャラクター (
^
) を使用して、検索をファイル名の先頭に制限します。
ls *パラメータ*.c
's/^parameter/value/' *.c の名前を変更します
ls *パラメータ*.c
ls 値*.c
前に名前を変更したファイルがリストされており、文字列「parameter」が 3 つのファイル名の先頭にあり、1 つのファイル名の末尾にあることがわかります。
rename
コマンドは、検索語「parameter」の前に行頭
(^
) メタキャラクターを使用します。これは、検索語がファイル名の先頭にある場合にのみ、その検索語が見つかったとみなすように
rename
指示します。検索文字列「parameter」がファイル名の他の場所にある場合は無視されます。
ls
で確認すると、ファイル名の末尾に「parameter」を含むファイル名は変更されていないことがわかりますが、名前の先頭に「parameter」を含む 3 つのファイル名は検索文字列が代替文字列に置き換えられています。 「価値」という用語。
rename
の力は Perl の力にあります。
Perl のすべての機能を
自由に利用できます。
グループ化による検索
rename
はさらに多くのトリックが含まれています。名前に類似した文字列が含まれるファイルがある場合を考えてみましょう。これらはまったく同じ文字列ではないため、ここでは単純な検索や置換は機能しません。
この例では、
ls
使用して、「str」で始まるファイルがあることを確認します。そのうちの 2 つ、string.c と strangle.c があります。グループ化と呼ばれる手法を使用して、両方の文字列の名前を一度に変更できます。
この
rename
コマンドの中心的な式は、ファイル名内で文字シーケンス「stri」または「stra」を持ち、そのシーケンスの直後に「ng」が続く文字列を検索します。つまり、検索語は「string」と「strang」を検索することになります。代替用語は「bang」です。
ls str*.c
's/(stri|stra)ng/bang/' *.c の名前を変更します
ls ban*.c
もう一度
ls
使用すると、string.c が bang.c になり、strangle.c が bangle.c になっていることが確認されます。
名前変更を伴う翻訳の使用
rename
コマンドは、ファイル名に対して変換と呼ばれるアクションを実行できます。変換の簡単な例としては、一連のファイル名を強制的に大文字にすることが挙げられます。
以下の
rename
コマンドでは、中心となる式の開始に
s/
を使用せず、
y/
使用していることに注意してください。これは、置換を実行しないこと
rename
伝えます。翻訳を行っております。
az
用語は、a から z までのシーケンス内のすべての小文字を意味する Perl 式です。同様に、
AZ
という用語は、A から Z までのすべての大文字を表します。
このコマンドの中心となる表現は、「ファイル名に a から z までの小文字が見つかった場合、それらを A から Z までの大文字のシーケンスの対応する文字に置き換える」と言い換えることができます。
すべての「.prg」ファイルのファイル名を強制的に大文字にするには、次のコマンドを使用します。
‘y/az/AZ/’ *.prg の名前を変更します
ls *.PRG
ls
コマンドを実行すると、すべての「.prg」ファイル名が大文字になっていることがわかります。実際、厳密に言うと、これらはもはや「.prg」ファイルではありません。それは「.PRG」ファイルです。 Linux では大文字と小文字が区別されます。
中央の式の
az
および
AZ
項の位置を逆にすることで、最後のコマンドを元に戻すことができます。
‘y/AZ/az/’ *.PRG の名前を変更します
ls *.prg
Perl は 5 分では学べません
Perl を理解するには、十分な時間を費やす必要があります。ただし、
rename
コマンドの時間を節約する機能を使い始めるには、Perl の知識がまったく必要なく、パワー、シンプルさ、時間の点で大きなメリットが得られます。





