ffmpegとフォルダ/ファイル名のスペースに問題があります。私のコードは次のようになります:bash ffmpegファイル名の空白と検索
cd /volume1/PUBLIC/Musik/AutoConvert
find . -type d -exec mkdir -p -- /volume1/PUBLIC/Musik/Converted/{} \;
find -type f |sed 's|./||' |while read NEWNAME; do
ffmpeg -i ""/volume1/PUBLIC/Musik/AutoConvert/"$NEWNAME""" -codec:a libmp3lame -qscale:a 2 "/volume1/PUBLIC/Musik/Converted/"${NEWNAME%.[Ff][Ll][Aa][Cc]}".mp3"
echo done with file: "$NEWNAME"
done
しかし、スペースがあればffmpegで失敗します。私のフォルダ構造は次のようになります。
[email protected]:/volume1/PUBLIC/Musik/AutoConvert$ find -type f |sed 's|./||'
A B/C.mp3
A B/C D.mp3
A/C D.mp3
A/C.mp3
/Converted/A/C.mp3は機能しますが、それだけです。フォルダ内の他のすべてのファイル名に失敗します。
[NULL @ 0x20bb3e0] Unable to find a suitable output format for '/volume1/PUBLIC/Musik/Converted/A/C'
/volume1/PUBLIC/Musik/Converted/A/C: Invalid argument
done with file: A/C D.mp3
[NULL @ 0x11bf280] Unable to find a suitable output format for '/volume1/PUBLIC/Musik/Converted/A'
/volume1/PUBLIC/Musik/Converted/A: Invalid argument
done with file: A B/C D.mp3
[NULL @ 0x11f93e0] Unable to find a suitable output format for '/volume1/PUBLIC/Musik/Converted/A'
/volume1/PUBLIC/Musik/Converted/A: Invalid argument
done with file: A B/C.mp3
私はエラーを取得-input ffmpegの上の「二重使用しない場合:
/volume1/PUBLIC/Musik/AutoConvert/A: Is a directory
done with file: A B/C.mp3
/volume1/PUBLIC/Musik/AutoConvert/A: Is a directory
done with file: A B/C D.mp3
/volume1/PUBLIC/Musik/AutoConvert/A/C: No such file or directory
done with file: A/C D.mp3
私は正しい軌道に乗ってるようですが、ちょうどあまりにも遠くから...見えますが私の目標。
誰でもいくつかの助けを提供することはできますか?
なぜでしょうか?/ volume1/PUBLIC/Musik/AutoConvert/$ NEWNAME "...."/volume1/PUBLIC/Musik/Converted/${NEWNAME%.[Ff][Ll][Aa][Cc] } .mp3 "'?変数の値はスペースで** **囲む必要があります。二重引用符で囲みます。幸いです。 – shellter
なぜ '。/'接頭辞を取り除くのではなく、 'find'を最初に置かないように伝えるのですか?たとえば、 'find。 -type f -printf '%P \ 0' | IFS = read -r -d '' 'は'。/ '接頭辞を持たない(何かを傷つけるわけではない)。 –
'' ''は絶対に何もしません*:クォートするコンテキストを開始し、すぐに終了するので、周囲のコードがどのように解析されるかには何の効果もありません。 –