これが私を狂わせます。
使いたいmp3がたくさんありますffmpeg
。
次の行を使用しようとしています(スクリプトが大きく、これが問題になる部分です)。
find . -type f \( -iname \*.mp3 \) | parallel ffmpeg -i "{}" -acodec libmp3lame -ab 128k "$output_folder_with_spaces/{.}-128k.mp3" \;
iname
(今後さらに拡張することができるので、このセクションが存在します)
しかし、引用符を付けてもmp3の名前があるので、{}
常にそのような言葉を聞きます。それも効果があるかもしれません。No such file or directory
01 - My song
"$output_folder_with_spaces"
Googleでたくさん検索しましたが、次の例が見つかりませんでした。スペースを含めるには{}
fromを使用してください。変数またはハードコーディングされたパスを引用符で囲んで使用した場合にのみ、これが見つかりました。find
{}
この場合、空間の問題をどのように解決できるかをご存知ですか?
答え1
無効な代替文字列を使用していますparallel
。引用された引数も渡す必要があり、末尾が何であるか-q
よくわかりません...例:\;
dirname_with_spaces="/home/don/my dir with spaces/"
/
(に割り当てられたパスの末尾を参照してくださいdirname_with_spaces
)そして、ディレクトリmp3
にスペースがあるいくつかのファイル名はtest
ここにありますcwd
。
./test/Commercial DEMO - 09.mp3
./test/Commercial DEMO - 11.mp3
./test/Handel Royal Fireworks - 07.mp3
./test/Jazz Rag Ensemble - 10.mp3
./test/Mouret - Rondeau.mp3
使用
find . -type f -iname \*.mp3 | parallel -q ffmpeg -i {} -acodec \
libmp3lame -ab 128k "$dirname_with_spaces"{/.}-128k.mp3
次のファイルが生成されます。
/home/don/my dir with spaces/Commercial DEMO - 11-128k.mp3
/home/don/my dir with spaces/Commercial DEMO - 09-128k.mp3
/home/don/my dir with spaces/Handel Royal Fireworks - 07-128k.mp3
/home/don/my dir with spaces/Jazz Rag Ensemble - 10-128k.mp3
/home/don/my dir with spaces/Mouret - Rondeau-128k.mp3
コマンドラインq
uoting( ) と次のコマンドparallel -q
の使用に注意してください。
{}
Input line.
find
これは、次の出力へのパスを意味します./test/Mouret - Rondeau.mp3
。
{/.}
Basename of input line without extension.
拡張Mouret - Rondeau
次 "$dirname_with_spaces"{/.}
へ拡張/home/don/my dir with spaces/Mouret - Rondeau
後者は{.}
コマンドで使用されているものとはかなり異なります。
{.}
Input line without extension.
それは拡張され./test/Mouret - Rondeau
、次に "$dirname_with_spaces"{.}
拡張されます/home/don/my dir with spaces/./test/Mouret - Rondeau
。明らかに、これは/./test/
アンダーがないので間違っているでしょう/home/don/my dir with spaces
。
答え2
find
構文を誤って理解しました。この{}
構文はと一緒に使用されます-exec
。また、対応する括弧は必要ありません。デフォルトの作業順序をオーバーライドする場合にのみ必要です(左から右に評価しないなど)。全体的にexecの場合は次のようになります(水平スクロールを避けるために分割)。
find . -type f -iname \*.mp3 -exec \
ffmpeg -i "{}" -acodec libmp3lame -ab 128k \
"$output_folder_with_spaces/{}-128k.mp3" \;
これはあなたにfoo.mp3-128.mp3
...というファイルを提供します。これがあなたが望むものであることを願っています。これが何を意味するのかわかりません{.}
。少なくともGNU findの場合、有効な構文ではありません。
lame
FFmpeg経由ではなく直接使用することをお勧めします(-ab
VBRモードではなくABRモードを使用している場合は、正当な理由なく使用しないことをお勧めします)。実際にMP3を再エンコードしないことをお勧めします。ロスレスソースでエンコードすると、同じビットレートでより良い品質が得られます。