バッチ ogg vorbis トランスコーディング

バッチ ogg vorbis トランスコーディング

私が望むのは、単にこのコマンドを実行することだけです。

find . -name "*flac" -exec oggenc -q 7 {} \;

私が選択したフォルダにoggsを吐きます。~/vorbisコマンドの最後に入れようとしましたが、述語エラーが発生しました。

find: possible unquoted pattern after predicate `-execdir'?

「Find Man Pages」を見て、{}最後のページがファイルを探している-q 7ことを知っていますflac。だからこれが私をジレンマに陥る。

選択したフォルダにoggsを出力するためにコマンドに何を追加する必要があるのか​​を知っている人はいますか?

読んで助けてくれてありがとう。

ところで、私は試しました:

find . -name "*flac" -exec oggenc -q 7 ~/vorbis {} \;

しかし、これはflacがあるフォルダにoggsだけを吐き出します。~/vorbisフォルダではありません。フォルダ名と構造を保持して、選択したフォルダ(~/vorbis)に出力しようとしています。私は完全なスクリプトを要求するものではありません。私は単に私が達成したいことをどのように達成できるかを誰かに説明するように頼むだけです。

ありがとうございます!

答え1

サブシェルを使用すると、ファイル名を変更して別のコマンドを実行して、出力が目的の場所に移動することを確認できます。

mkdir -p ~/vorbis
find . -name "*flac" -exec sh -c 'oggenc -q 7 "$1" -o ~/vorbis/"${1%.*}".ogg' _ {} \;

...flacモジュールで開く: "./summerbreezes.flac"を "/home/k/vorbis/./summerbreezes.ogg"でエンコードされたFLACファイルリーダー(品質7.00 [99.0%] [0m00s残り] -

エンコードファイル "/home/k/vorbis/./summerbreezes.ogg" を完成させてください。

ファイル長:1m 11.0s経過時間:0m 01.3s速度:55.0760平均ビットレート:198.3kb / s

ls ~/vorbis
alsowe.ogg        christmascard.ogg  love1.ogg          themanyone2.ogg  yourmom.ogg
An_Open_Door.ogg  GEDC4177.ogg       summerbreezes.ogg  winning.ogg

答え2

パスを気にしない場合は、トリックmyfile.flacを使用してすべての-execdirパスを1つのディレクトリに配置できます。

find-execdirコマンドを実行する前に、ファイルのディレクトリが変更されます。{}に変更されることもありました./

find . -name '*.flac' -execdir oggenc -q 7 -o ~/vorbis/{}.ogg {} \;

したがって、この例では、対応する項目が見つかると次のように./path/to/myfile.flac実行されます。

cd ./path/to
oggenc -q 7 -o ~/vorbis/./myfile.flac.ogg ./myfile.flac

メモ:少なくともGNU findutilsの./myfile.flac場合本物相対パスではなく、見つかったファイルやシンボリックリンクへのフルパスですが、OPの質問には重要ではありません.)

関連情報