これが私を狂わせます。
使いたい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
。