Linux でダッシュを含むすべてのサブディレクトリ内のすべての .jpg ファイルの名前を変更するにはどうすればいいですか?

Linux でダッシュを含むすべてのサブディレクトリ内のすべての .jpg ファイルの名前を変更するにはどうすればいいですか?

ダッシュを含むサブフォルダーがあります (例: cd という名前のサブディレクトリー)。すべてのサブディレクトリーにあるすべての .jpg ファイルの名前を変更する必要があります。これを行うためのヒントはありますか? さまざまなオプションを試しましたが、何も役に立ちませんでした (サブフォルダーにダッシュが含まれているためだと思います -) 皆さん、ありがとうございます! :)

私が試してみました

find -name '*.jpg' -exec rename $RANDOM.jpg $RANDOM.jpg {} \;

しかし、

(Missing operator before jpg?) syntax error at (user-supplied code)
line 3, near "2635.jpg" Bareword found where operator expected at
(eval 4) line 1, near "#line 1 2635.jpg"

答え1

名前を変更する必要はありません。mv で実行できるからです。

find -name '*.jpg' -exec bash -c 'mv -i "{}" "$RANDOM.jpg"' \;

mv -i は対話型を意味します。上書きする前に確認します。

これは、ファイルが異なる名前を取得することを確認するための、詳細なテストではなく、アドホックなテストです。もう少しテストすると、次のようになります。

find -name '*.jpg' -exec echo bash -c 'mv -i "{}" "$RANDOM.jpg"' \;

ただし、これによりすべてのファイルが現在のディレクトリに配置されます。-execdir を使用するのもオプションでしょうか?

find -name '*.jpg' -execdir bash -c 'mv -i "{}" "$RANDOM.jpg"' \;

ただし、バックアップを取るなど、データには注意してください。find による大量操作は危険なツールです。責任は負いかねます。

私の知る限り、このレースではダッシュに有利な馬はいない。

答え2

あなたは不明瞭ですどうやってファイル名を変更したい場合どれのfind名前を変更するファイルでは、ダッシュを含む希望のパターンに従ってすべてのファイルを一致させるために使用できます。

find [PATH...] -type f -name '*-*' | prename EXPR

ディレクトリも一致させたい場合は、以下の-depthオプションを使用する必要があります。

find [PATH...] -depth -name '*-*' | prename EXPR

答え3

名前にダッシュが含まれるサブフォルダーでこれを試してみたところ、うまくいきました。

Linux/Ubuntu でファイル名の一部を再帰的に変更する

ファイル名を変更するには、探すコマンドと組み合わせて名前を変更する次のようにコマンドします:

find -type f -execdir rename 's/OriginalText/NewText/' *.jpg '{}' \;

したがって、すべての jpg ファイル名のすべてのダッシュ「-」をアンダースコア「_」に置き換える場合は、次のように入力します。

find -type f -execdir rename 's/-/_/' *.jpg '{}' \;

関連情報