1

このbashスクリプトで次のことをしようとしていますが、行き詰まりました..

1) /usr/incoming/ ディレクトリで拡張子が .mp3 のすべてのファイルを検索します。

2) eyeD3 を使用して、既存の ID3 タグをすべて削除します。

3) eyeD3 を使用して、タイトル タグ「NEW NAME」をファイルに書き戻します。

4) mv を使用して、拡張子 .mp3 を持つすべてのファイルの名前を latest.mp3 に変更し、強制的に移動します (同じ名前の他のファイルを上書きします)。

最後のビット (No.4) 以外はすべて機能しています。

mv コマンドで何か間違ったことをしていることは知っていますが、何がわかりません。

コードは次のとおりです。

 find /usr/incoming/ -name '*.mp3' \
   -exec eyeD3 --remove-all -t 'NEW NAME' '{}' \; \
   -exec mv -f '*.mp3' latest.mp3 /usr/complete \;

誰かが私のやり方の誤りを教えてくれますか? ;)

4

1 に答える 1

0

*.mp3後のコマンドの を に変更して{}、タグ付けしたばかりのファイルの明示的な名前を渡します。mv単一の呼び出しで複数のファイルの名前を同じ名前に変更することを拒否します-3つ以上の引数を渡す場合、最後の引数がディレクトリである必要があります-とにかく、findの引数として与えられたものはすべて-execリテラル引数として渡されます。シェル経由ではないため、グロブは展開されず、リダイレクトは処理されません。ただし、{}.

find /usr/incoming/ -name '*.mp3' \
   -exec eyeD3 --remove-all -t 'NEW NAME' {} ';' \
   -exec mv -f {} /usr/complete/latest.mp3 ';'
于 2014-06-16T02:22:40.033 に答える