ウェブサイト検索

Linuxでディレクトリの名前を変更する方法


重要なポイント

  • Linuxでディレクトリの名前を変更しても、その中のデータに影響はありません。データへのパスが変更されるだけで、ファイルやディレクトリはそのままです。
  • 「mv」コマンドは、Linuxでディレクトリの名前を変更する最も簡単で一般的な方法です。
  • より複雑な名前変更作業を行う必要がある場合は、Perl式を使用した「rename」コマンドが強力で柔軟なオプションを提供します。お使いのLinuxディストリビューションに適したバージョンをインストールしてください。

Linuxでディレクトリの名前を変更するのは簡単で、方法はいくつもあります。単一のディレクトリの名前を変更することから、多くのディレクトリを見つけて名前を変更する方法まで、以下にそのやり方を示します。

フォルダーの名前を変更してもデータに影響はありません

ディレクトリの名前を変更することは、私たち全員が時々行う必要があることです。

ディレクトリを作成して名前を誤ってスペルし、修正したい場合があります。しばしば、プロジェクトの経過や時期によってディレクトリの目的が変わることがあり、その新しい用途を反映するように名前を調整したいと思います。もしかすると、アーカイブファイルを解凍した際に、ディレクトリ名が大文字のディレクトリツリーが作成されてしまい、小文字にしたいこともあるでしょう。

理由はどうあれ、ディレクトリの名前を変更しても、その中にあるデータには何の影響もありません。それはデータのパスを変更しますが、名前を変更したディレクトリ内のファイルやディレクトリは変更されません。

システムディレクトリの名前を変更しないでください。 システムファイルやコマンドのパスを変更することは、少なくともあなたのコンピュータの動作に悪影響を及ぼします。ディレクトリの名前を変更するためにsudoを使用する必要がある場合---本当に自分が何をしているのかがわかっていない限り---ほとんどの場合、名前を変更しない方が良いでしょう。

mvコマンドの使用

最も単純なケースでは、実際に必要なのは mv コマンドだけです。これはすべてのLinuxディストリビューションに不可欠な部分であり、インストールするものは何もありません。

mv コマンドは、執筆時点で50年以上の歴史があります。これは、Unix の夜明けから生まれたもので、短くて暗号的なコマンドが流行していた時代に由来しています。おそらく、テレタイプやダム端末から実際のコンピュータに遅いシリアルラインを通過させる必要がある文字数を減らすためでしょう。

実際には「移動」を意味し、ファイルをディレクトリからディレクトリへ移動するために使用できます。ファイルを既にある場所に移動し、新しい名前を付けると、そのファイルの名前を変更したことになります。そして、私たちはディレクトリでも同じことができます。

このディレクトリには二つのサブディレクトリがあります。

ls

ディレクトリの名前を変更するには、mvコマンドを使用します。現在のディレクトリ名と新しい名前を指定する必要があります。

mv old-work archive-2

現在のディレクトリにリネームしたいディレクトリがない場合は、ディレクトリ名と一緒にパスを提供してください。

mv ~/htg/old-work ~/htg/archive-2
ls

ファイルブラウザを使用する

ファイルブラウザはディレクトリの名前を変更することができます。GNOME Filesアプリケーションでは、キーストロークはF2です。ディレクトリをハイライトしてF2キーを押すと、「フォルダーの名前変更」ダイアログが表示されます。

新しい名前を入力し、緑色の「名前変更」ボタンをクリックしてください。

ディレクトリはあなたのために名前が変更されました。

それはそれほど簡単です。

renameコマンド

もしあなたのニーズが単にディレクトリの名前を変更する以上に複雑であるなら、renameコマンドを使用する必要があるかもしれません。これにより、Perlの式を使用してファイルやディレクトリの名前を変更することができます。ディレクトリの名前を変更するための、より強力で柔軟な方法を提供します。

Perlベースのrenameコマンドについて話します。Linuxのコアユーティリティの一部である古いrenameコマンドがあります。私たちが使用したいPerlのrenameコマンドをインストールする必要があるでしょう。

既存の rename コマンドとの名前の衝突を避けるために、Fedora では Perl の rename コマンドは prename と呼ばれ、Manjaro では perl-rename と呼ばれています。Ubuntu では、rename と prename コマンドは両方とも file-rename というバイナリに解決されるシンボリックリンクです。

つまり、Manjaroではperl-renameを使う必要があり、Fedoraではprenameです。Ubuntuではrenameまたはprenameを使用できます。

UbuntuにPerl renameをインストールするには、次のコマンドを入力する必要があります:

sudo apt install rename

Fedoraでは、コマンドは次のとおりです:

sudo dnf install prename

Manjaroでは、そのパッケージはperl-renameと呼ばれています。

sudo pacman -Sy perl-rename

例を実行する場合は、自分のディストリビューションに適したコマンドを使用していることを確認してください。

リネームとの最初のステップ

rename コマンドは Perl 正規表現を取り込み、それをファイルまたはディレクトリ、またはファイルやディレクトリのグループに適用します。

私たちのディレクトリには、他のディレクトリのコレクションがあります。

ls

彼らの名前は小文字、大文字、混合ケースの組み合わせです。適切な式を使ってそれらすべてを小文字に変換できます。

rename 'y/A-Z/a-z/' *
ls

すべてのディレクトリは現在小文字になっており、以前は完全に大文字だったものや、時々大文字の文字を含んでいたものもあります。

すべての魔法は表現に含まれています。表現はシングルクォート「'」で囲まれています。これが全コマンドの意味です。

  • y: これは、最初の文字の範囲内の任意の文字を検索し、それを2番目の文字の範囲内の対応する文字に置き換えることを意味します。
  • /A-Z/a-z/: 最初の範囲は「A」から「Z」までのすべての文字であり、2番目の範囲は「a」から「z」までのすべての文字です。
  • *: アスタリスクワイルドカードは、これをすべてのディレクトリに適用することを意味します。

言い換えれば、そのコマンドは「すべてのディレクトリについて、大文字をそれに対応する小文字に置き換えよ」となります。

明らかに、renameを使って単一のディレクトリの名前を変更することはできますが、やり過ぎの感があります。mvを使用した方が早くなります。

rename 's/gamma/epsilon-2/' *
ls

この表現の「s」は置換を意味します。これは各ディレクトリをチェックして、その名前が「gamma」であるかどうかを確認します。もしそうであれば、「epsilon-2」に置き換えます。しかし、これは「gamma-zeta」と呼ばれるディレクトリにもマッチするので、その場合は「epsilon-2-zeta」に名前が変更されることに注意してください。

この問題は、文字列の先頭に「^」と文字列の末尾に「$」のメタキャラクターを式の最初の節に追加することで回避できます。

ls
rename 's/^gamma$/epsilon-2/' *
ls

これは「epsilon-2」ディレクトリに手を加えない。

他のコマンドと一緒に名前変更を使用する

私たちは、renameが作業するディレクトリを探すために他のコマンドを使用できます。ネストされたディレクトリのセットがあり、"-old"で終わるものをすべて"-archive"で終わるように名前を変更したい場合、findとxargsを使用することでそれを実現できます。

私たちはxargsを使用する必要があります。なぜならrenameはパイプされた入力を受け付けないからです。xargsコマンドは、その問題を克服し、パイプされた入力を受け入れて、他のコマンドのコマンドラインのパラメータとして追加します。

私たちのコマンドはこのようになります:

find . -depth -type d -name "*-old" | xargs -r rename "s/old$/archive/"
  • .: 現在のディレクトリで検索を開始するためにfindを指示します。もちろん、これは任意のパスにすることができます。
  • -深さ: 深さ優先探索を使用します。これは、より深くネストされたサブディレクトリの内容が、より高いものよりも先に処理されることを意味します。
  • -type d: ファイルではなくディレクトリを検索します。
  • -name "*-old": 検索の手がかり。"-old"で終わる名前のディレクトリを探しています。
  • |: 私たちはfindの出力をxargsコマンドにパイプしています。
  • xargs -r: -r(空の場合は実行しない)とは、一致するディレクトリがない場合はコマンドを実行しないことを意味します。
  • rename "s/old$/archive/": 実行されるrenameコマンドです。

コマンド実行前のディレクトリツリーはこのようになっています。

私たちはコマンドを実行します:

そして、入れ子になったものを含むすべての一致するディレクトリが名前を変更されたことが確認できます。

適材適所

ディレクトリの名前を変更するには、mvだけで十分です。GUIアプリケーションが好みであれば、ファイルブラウザを使用できます。名前を変更するディレクトリがたくさんあり、特にそれらがディレクトリツリー全体に散在している場合は、renameの柔軟性が必要になります。

関連記事: