我知道那裏已經有很多這樣的問題了,但是我的情況足夠獨特,以至於他們迄今都沒有幫助過我。將包含空格的shell變量作爲參數傳遞
我正在寫一個腳本,它會重新格式化我的(標記不佳的)音樂庫。它目前以Music/Genre/Artist/Album/## - Title.wav的形式出現。
從Music目錄中,我運行我的script1,它調用find -name "*.wav" -exec script2 {} ${other_args}
。 Script2分析變量的路徑,創建適當的輸出目錄(如果它不存在),然後調用ffmpeg進行壓縮。
例如:($ sourcefilepath包含{}從FIND)
ffmpeg -i "$sourcefilepath" "$path/$to/$outfile.$extension"
如果我的文件名或路徑不包含空格,它就像一個魅力。
如果它包含空格,ffmpeg的失敗,並出現以下錯誤:
Blues/Country Blues/Rhythm, Country And Blues/08-Natalie Cole & Reba McEntire Since I Fell For You.wav: No such file or directory
注:這是源文件無法找到。輸出文件似乎正常工作,即使有空格。這不是我正在運行的完整命令(它也有一些-metadata標誌,但是它也似乎正常工作,我正在用我上面寫的命令進行調試)。
這裏有趣的是ffmpeg不會將$ sourcefilepath解釋爲兩個參數,它只是找不到我指定的文件。從Music目錄運行以下內容。
ffmpeg -i Blues/Country\ Blues/Rhythm\,\ Country\ And\ Blues/08-Natalie\ Cole\ \&\ Reba\ McEntire\ \ \ Since\ I\ Fell\ For\ You.wav output.flac
我有點卡在這裏。網絡上的其他信息涉及獲取命令以查看具有空格的變量作爲一個參數而不是多個參數。我似乎已經這樣做了,但ffmpeg現在找不到我的文件。
通常我只是使用find -name "*.wav" -exec ffmpeg -i {} ${args} \;
,但我需要處理文件路徑來提取我的元數據。
我對shell腳本相當陌生;有人知道這裏發生了什麼嗎?
您可以[刪除所有不重要的東西](http://stackoverflow.com/tags/bash/info)在腳本中,驗證它仍然存在相同的問題,並將其添加到您的問題? – 2014-10-29 17:24:12