web-dev-qa-db-ja.com

コマンドラインを使用して複数のファイルの名前を簡単に変更するにはどうすればよいですか?

Windowsでファイルの名前をすばやく変更する方法の1つは

F2 > Rename > Tab (to next file) > Rename ...

しかし、Ubuntu/Nautilusでは、次のファイルに移動できません。しかし、Linux上では、コマンドラインの代替手段が必要だと思います。

ただし、特定のファイルの名前を変更する方法をより詳細に制御したい場合があります。その場合、おそらく次のファイルにタブで移動できる方が良いでしょう

103
Jiew Meng

私は常にrenameを使用しています。それはかなり単純ですが、できれば基本的な正規表現を知っていることを願っています:

rename "s/SEARCH/REPLACE/g"  *

これは、すべてのファイルで文字列SEARCHREPLACEに置き換えます(つまり、*)。 /gはグローバルを意味するため、SEARCH_SEARCH.jpgがある場合は、REPLACE_REPLACE.jpgという名前に変更されます。 /gがなかった場合、置換は1回しか行われなかったため、REPLACE_SEARCH.jpgという名前になりました。大文字と小文字を区別しない場合は、/i(つまり、最後に/giまたは/igを追加します)。

正規表現を使用すると、さらに多くのことができます。

このrenameprename (別名Perl rename)コマンドであり、完全なPerl正規表現をサポートしていることに注意してください。パターンを使用する別のrenameがあり、それほど強力ではありません。 prenameは(Perlとともに)Ubuntuにデフォルトでインストールされていましたが、今では次のようにする必要があります。

Sudo apt install rename

以下に例を示します。

プレフィックス

追加

rename 's/^/MyPrefix_/' * 
  • document.pdfMyPrefix_document.pdfに名前が変更されました

削除

また、不要な文字列を削除することもできます。 CD RIP 01 Song.mp3のような名前の20個のMP3ファイルがあり、「CD RIP」部分を削除し、1つのコマンドでそれらをすべて削除したいとしましょう。

rename 's/^CD RIP //' *
  • CD RIP 01 Song.mp3から01 Song.mp3

'^CD RIP 'に余分なスペースがあることに注意してください。スペースがないと、すべてのファイルにはファイルの最初の文字としてスペースがあります。また、これは^文字がなくても機能しますが、ファイル名のどの部分でもCD RIP と一致します。 ^は、ファイルの先頭にある文字のみを削除することを保証します。

サフィックス

追加

rename 's/$/_MySuffix/' *
  • document.pdfdocument.pdf_MySuffixに名前が変更されました

変更

rename 's/\.pdf$/.doc/' *

Something.pdfSomething.docに変更します。 (バックスラッシュの理由は、.が正規表現のワイルドカード文字であるため、.pdfqPDFに一致しますが、\.pdfは正確な文字列.pdfにのみ一致します。 BASHに慣れていない場合は、バックスラッシュを一重引用符で囲む必要があります!引用符を省略したり、二重引用符を使用したり、bashはそれらを翻訳しようとすることはできません。\.and"\.".と等しい(ただし、二重引用符とバックスラッシュが使用されます。たとえば、改行には「\ n」が使用されますが、"\."は有効なバックエスケープシーケンスではないため、 .

実際、文字列の一部を全体ではなく引用符で囲むこともできます。's/Search/Replace/g's/'Search'/'Replace'/gおよびs/Search/Replace/gと同じで、BASHになります。特殊文字(およびスペース)に注意する必要があります。


正しい正規表現を持っていることに自信がない場合は、-nオプションを使用することをお勧めします。名前が変更されるものを示し、それを実行せずに終了します。例えば:

rename -n s/'One'/'Two'/g *

-nフラグをそこに配置しなかった場合、これにより行われたすべての変更がリストされます。よさそうなら、を押します Up 戻るには、-nを消去してを押します Enter (または、-vに置き換えて、変更をすべて出力します)。

:17.04より上のUbuntuバージョンには、デフォルトでrenameが同梱されていませんが、リポジトリでは引き続き利用可能です。 Sudo apt install renameを使用してインストールします

187
Matt

pyrenamer を試してください。

Nautilusと統合されていませんが、仕事は完了します。 ここ はレビューです。

Thunar (XFCEの一部)には、個別に実行できる名前変更機能もあります。

Thunar bulk renamer

21
RolandiXor

nautilus-renamer という名前のプロジェクトがランチパッドにあるようです。スクリプトをダウンロードして展開すると、make installを実行してインストールできます。それはいくつかの機能を持っているように見えます、またはあなたが何らかのプログラミングがあるかもしれないことを知っているなら、それはただpythonスクリプトであるのであなたのニーズにそれを単に強化することができます。

enter image description here

9
sagarchalise

コマンドラインでは、単一のファイルの名前を変更するには、コマンドは単に

mv file1.txt file2.txt

バッチで実行する場合は、おそらくスクリプトを使用して実行する必要があります。あなたがより詳細を提供するなら、私または他の誰かがあなたのために1つをたぶん上げることができます。ただし、ファイルに内容を追加するスクリプトは次のようになります。

#!/bin/bash
for file in *
do
    # separate the file name from its extension
    if [[ $file == *.* ]]; then
      ext="${file##*.}"
      fname="${file%.*}"
      mv "$file" "${fname}_APPENDSTUFFHERE.$ext"
    else
      mv "$file" "${file}_APPENDSTUFFHERE"
    fi
done

名前を変更する必要がある方法に応じて、たとえば特定の名前変更規則に従う場合など、これはおそらく調整されます。 (私のbash-fooはそれほど素晴らしいものではないので、個人的にはPerlスクリプトを介してこれを行いますが、それは私だけです。)

以前に尋ねられた質問 からファイル名と拡張子が分離されていることに注意してください。

8
Dang Khoa

コマンドラインなしで実行する場合は、Windowsで実行していたのと同様に、タブキーではなく右矢印キーを使用します。これにより、Windowsのタブと同じように次のファイルが選択されます。

7
Rafał Cieślak

複数のファイルの名前を一度に変更する方法 と同じ質問ではありませんが、その答えで提案したのと同じプログラムを提案します:qmv

qmvはrenameutilsパッケージの便利なツールです。お気に入りのテキストエディタを使用してファイルの名前を変更できます。 vimのパワーと組み合わせて、優れた名前変更ユーティリティを使用できます。

私は通常、たくさんのファイルの名前を変更したいディレクトリでqmv -f doのように呼び出します。または、qmv -R -f doを再帰的に名前変更する場合。

複数のファイルの名前を変更する必要があるときはいつでも、常にqmv(およびvim)を使用します。

http://www.nongnu.org/renameutils/

7
dempa

唯一の適切なオプションが手動でファイルの名前を変更する場合、それを行う素晴らしい方法は vidirmoreutils パッケージ内)を使用することです:

Sudo add-apt-repository universe && Sudo apt-get update && Sudo apt-get install moreutils
DESCRIPTION
       vidir allows editing of the contents of a directory in a text editor.
       If no directory is specified, the current directory is edited.

       When editing a directory, each item in the directory will appear on
       its own numbered line. These numbers are how vidir keeps track of what
       items are changed. Delete lines to remove files from the directory, or
       edit filenames to rename files. You can also switch pairs of numbers
       to swap filenames.

       Note that if "-" is specified as the directory to edit, it reads a
       list of filenames from stdin and displays those for editing.
       Alternatively, a list of files can be specified on the command line.


ファイルの選択的な名前変更

現在の作業ディレクトリのコンテンツ:

.
├── bar
├── baz
└── foo

vidirを実行し、名前を変更するファイル名を含む行のファイル名を変更します。ヒット CTRL+O そして CTRL+X

screenshot3

.
├── bar.bak
├── baz.old
└── foo.new

ファイル名を選択的に切り替える

現在の作業ディレクトリのコンテンツ:

.
├── bar
├── baz
└── foo

現在の作業ディレクトリのファイルのコンテンツ:

$ for f in *; do printf '- %s:\n\n' "$f"; cat "$f"; echo; done
- bar:

This is bar

- baz:

This is baz

- foo:

This is foo

$ 

vidirを実行し、切り替えたいファイル名を含む行の番号を切り替えます。ヒット CTRL+O そして CTRL+X

screenshot4

.
├── bar
├── baz
└── foo
$ for f in *; do printf '- %s:\n\n' "$f"; cat "$f"; echo; done
- bar:

This is foo

- baz:

This is bar

- foo:

This is baz

$ 

ファイルを選択的に削除する

現在の作業ディレクトリのコンテンツ:

.
├── bar
├── baz
└── foo

vidirを実行し、削除するファイルを含む行を削除します。ヒット CTRL+O そして CTRL+X

screenshot2

.
└── baz
3
kos

私はkrenameを使用しています。 GUIアプリです。 mp3タグなどを読み取ることができます。

Krusaderの一部としてだけでなく、個別のアプリとしても存在します。

標準のPerlインストールの一部であるrenameスクリプトもあります(おそらくインストールされています)。 man renameで確認してください。

2
Adobe