web-dev-qa-db-ja.com

すべてのファイルにファイル拡張子を再帰的に追加します

ファイル拡張子のないファイルを含むいくつかのディレクトリとサブディレクトリがあります。これらのディレクトリ内に含まれるすべてのファイルに.jpgを追加します。ファイル拡張子を変更するためだけでなく、ファイル拡張子を追加するためのbashスクリプトを見てきました。また、再帰的である必要があります。誰かが助けてくれますか?

101
robjmills

明示的なループのない代替コマンド( man find ):

find . -type f -exec mv '{}' '{}'.jpg \;

説明:これは、現在のディレクトリ(-type f)から始まるすべてのファイル(.)を再帰的に検索し、それぞれに移動コマンド( mv )を適用します。 {}を囲む引用符にも注意してください。これにより、スペース(および改行...)を含むファイル名が適切に処理されます。

217
Stephan202

これにより、拡張子のないファイルが検索され、.jpgが追加されます

find /path -type f -not -name "*.*" -exec mv "{}" "{}".jpg \;
59
ghostdog74

これは少し遅れていますが、これまでの方法よりも優れたソリューション(読みにくいかもしれませんが)を追加すると思いました。

find /path -type f -not -name "*.*" -print0 | xargs -0 rename 's/(.)$/$1.jpg/'

find | xargsパターンは、通常、各ファイルに対して新しいプロセスをフォークする必要がないため、より効率的な実行をもたらします。

これには、従来の名前変更ではなく、Debianフレーバーのディストリビューション(別名プリネーム)にある名前変更のバージョンが必要であることに注意してください。ただし、これはごく小さなPerlスクリプトなので、任意のシステムで上記のコマンドを使用するのは簡単です。

9
Chad Huneycutt

このような、

for f in $(find . -type f); do mv $f ${f}.jpg; done

スペースで区切られたファイル名があるとは思っていませんが、
その場合、名前を少し処理する必要があります。

他のディレクトリからコマンドを実行する場合は、
find . with find /target/directory

4
nik

Windows Basicで拡張子のないすべてのファイルの名前を変更するには、ren * *.jpgを実行できます。ファイルは拡張子なしなので、*を使用するか、pngをjpgに変更する場合はren *.png *.jpgを使用します

1
Nuno

rename

拡張子のないファイルの名前を変更できるかどうかわからない(現在Windows 7を使用しています)

0
dfa