我想在一些視頻上自動執行修復索引的過程。以下是我的代碼。命令在Linux終端中運行,但不在bash腳本中
for f in ~/Videos/Temp/*
do
f=$(echo $f | sed 's/ /\\ /g')
name=$(echo $f | sed 's/Temp/Fixed/1')
mencoder -forceidx "$f" -o "$name" -oac copy -ovc copy
done
我遇到的問題是mencoder聲稱它無法在變量$ f中找到文件存儲。
MEncoder svn r34540 (Ubuntu), built with gcc-4.6 (C) 2000-2012 MPlayer Team
File not found: '/home/name/Videos/Temp/file\ name.avi'
Failed to open /home/bryan/Videos/Temp/file\ name.avi.
Cannot open file/device.
Exiting...
當我用擴展變量將命令打印到終端並運行它時,它工作得很好。我甚至修改了我的上面的代碼來打印出修復每個視頻的命令,將它們粘貼到一個新的腳本中,並且一切正常。我在Ubuntu上運行這個。任何想法可能會導致這種情況?
你不需要逃避你的空間,因爲你(正確地)在變量周圍使用引號。也許這是問題的一部分?您可能還想檢查您的終端是否也使用bash作爲它的外殼。 – mivk
@mivk:除了在賦值給'name'的時候變量沒有被引用。變量在擴展時應始終引用(如您所知)。 –
是什麼導致它(如你所知)是文件名中的空格。最好的解決方案是重命名所有文件,以便它們不包含空格。允許路徑中的空白是文件系統維護者的糟糕的設計決定。在路徑中使用空格是荒謬的。要求文件系統支持它們應該是一種死罪。 –