120

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

4

6 に答える 6

257

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

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

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

于 2009-07-10T09:14:52.427 に答える
69

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

find /path -type f -not -name "*.*" -exec mv "{}" "{}".jpg \;
于 2009-07-10T09:27:03.027 に答える
9

これは少し遅れていますが、これまでのものよりも優れた解決策 (おそらく読みにくいかもしれませんが) を追加すると思いました:

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

通常、このパターンを使用するfind | xargsと、ファイルごとに新しいプロセスをフォークする必要がないため、実行がより効率的になります。

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

于 2009-07-14T03:51:57.533 に答える
4

このような、

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

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

他のディレクトリからコマンドを実行する場合は、を
に置き換えることができます。find .find /target/directory

于 2009-07-10T09:07:15.763 に答える
0

rename

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

于 2009-07-10T09:28:44.363 に答える