web-dev-qa-db-ja.com

ファイル拡張子を一括追加する方法は?

photo importer カメラからファイルを移動して名前を変更しましたが、ファイル拡張子を保持するように指定するのを忘れていました。そのため、何百ものJPGおよびAVIファイルを含むフォルダーがいくつかあり、それらにはすべて適切な拡張子がありません。

ビデオファイルはそれほど多くないので、一般的なJPGへの一括名前変更の前または後に手動でファイル名を変更できます。

物事をより複雑にするために、ファイル名にはスペースが含まれているので、mv "*" "*.jpg"だけではできません。

Linuxには強力なコマンドがたくさんあります。ファイルにスペースが含まれている場合、ファイルの名前を一括変更して.jpg拡張子を追加するにはどうすればよいですか?

「スペースを使用しないでください」と言ってはいけません。それは私が求めていることではないからです。ありがとう。

シェルグロブは、適切に使用すれば、名前にスペースが含まれていても機能するはずです。

rename -nv -- 's/$/.jpg/' *

または

for file in *; do echo mv -- "$file" "$file.jpg"; done

[注:nスイッチまたはechoが削除されるまで、これらは「操作なし」です。したがって、コミットする前に正しい置換を確認できます]

より複雑なループとfileまたはmimetypeコマンドを使用しても可能になるjpgファイルとaviファイルを自動的に区別したい場合

15
steeldriver

より複雑な階層がある場合は、もう少し洗練されたアプローチが必要です。 bashの globstarオプション を使用して、**をゼロ個以上のディレクトリとサブディレクトリに一致させるか、findを使用できます。

  1. グロブスター

    shopt -s globstar
    for f in **/*; do [ -f "$f" ] && mv "$f" "$f".jpg; done
    

    [ -f "$f" ] &は、mvコマンドがディレクトリではなくファイルに対してのみ実行されるようにします。

  2. find

    find . -type f -print0 | xargs -0 -I{} mv "{}" "{}".jpg
    

    -type fは、ファイルのみを検索し、ディレクトリを検索しないことを保証します。また、print0を使用すると、findが改行ではなくヌル文字(\0)で区切って出力を出力します。これにより、スペースや改行などの奇妙なファイル名を正しく処理できます。

    xargsは入力のリストを取得し、指定されたコマンドを実行します。 -0フラグは、NULLで区切られた入力を予期するように指示し、-I{}は、{}の各インスタンスを、渡された各入力レコード(この場合はファイル)に置き換えます。

7
terdon

pyrenamerというプログラムを使用することをお勧めします。

それを開き、名前を変更したファイル名のパターンに{1}.jpgと入力します。

4
Tim

これを試す前にman renameを参照してください

これは魅力のように機能するはずです。

ターミナル内:

cd /path/to/exported/imgs/folder/
rename  's/(\w+)$/$1\.jpg/' *

「jpg」を必要なものに変更してください。

renameはPerl表現を使用できます。

最初の行で、ファイルディレクトリを入力しました

cd /path/to/exported/imgs/folder/

sは、置換前を表します。

名前の変更 's /(\ w +)$ / $ 1\.jpg /' *

次に、英数字とアンダースコア名を持つが、拡張子のないファイルを検索します

名前の変更 's/(\ w +)$/$ 1\.jpg /' *

そして、それをaddに置き換えます。ドットjpg

名前の変更 's /(\ w +)$/$ 1 \。jpg /' *

最後に、1行目のフォルダー内の任意のファイルに適用します

名前の変更 's /(\ w +)$/$ 1\.jpg /' *
4
Quijote Shin

特にWindowsアプリケーションによって作成されたファイル名を扱う場合、システムを管理するこの状況に頻繁に遭遇します。拡張子のないファイル名に.jpg拡張子を追加するには、このコマンドリストを検討してください。

find ./example -type f -name '*' -print0 | xargs -0 -I'{}' mv '{}' '{}'.jpg

findの-print0は区切り文字にNULL文字を生成し、xargsの-0はそれらのNULL区切り文字を受け入れるためのものです。これはサブディレクトリに対してもこれを行うので、その「./example」パスを必ず置き換えてください。

renameは素晴らしいコマンドですが、実装と仕様の両方に特有のディストリビューションです。私は通常、コマンドラインでrenameのようなものを使用しますが、スクリプトには常にGNU utils標準で記述します。

2
J. M. Becker