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ファイルを自動的に区別したい場合
より複雑な階層がある場合は、もう少し洗練されたアプローチが必要です。 bashの globstar
オプション を使用して、**
をゼロ個以上のディレクトリとサブディレクトリに一致させるか、find
を使用できます。
グロブスター
shopt -s globstar
for f in **/*; do [ -f "$f" ] && mv "$f" "$f".jpg; done
[ -f "$f" ] &
は、mv
コマンドがディレクトリではなくファイルに対してのみ実行されるようにします。
find
find . -type f -print0 | xargs -0 -I{} mv "{}" "{}".jpg
-type f
は、ファイルのみを検索し、ディレクトリを検索しないことを保証します。また、print0
を使用すると、find
が改行ではなくヌル文字(\0
)で区切って出力を出力します。これにより、スペースや改行などの奇妙なファイル名を正しく処理できます。
xargs
は入力のリストを取得し、指定されたコマンドを実行します。 -0
フラグは、NULLで区切られた入力を予期するように指示し、-I{}
は、{}
の各インスタンスを、渡された各入力レコード(この場合はファイル)に置き換えます。
pyrenamer
というプログラムを使用することをお勧めします。
それを開き、名前を変更したファイル名のパターンに{1}.jpg
と入力します。
これを試す前に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 /' *
特にWindowsアプリケーションによって作成されたファイル名を扱う場合、システムを管理するこの状況に頻繁に遭遇します。拡張子のないファイル名に.jpg
拡張子を追加するには、このコマンドリストを検討してください。
find ./example -type f -name '*' -print0 | xargs -0 -I'{}' mv '{}' '{}'.jpg
findの-print0
は区切り文字にNULL文字を生成し、xargsの-0
はそれらのNULL区切り文字を受け入れるためのものです。これはサブディレクトリに対してもこれを行うので、その「./example」パスを必ず置き換えてください。
rename
は素晴らしいコマンドですが、実装と仕様の両方に特有のディストリビューションです。私は通常、コマンドラインでrename
のようなものを使用しますが、スクリプトには常にGNU utils標準で記述します。