我正在運行一個快速 bash 腳本,它將任何 .mov 檔案轉換為 .mp4。這在 99% 的情況下都有效,但有時我會遇到問題,並收到以下錯誤:
文件 /home/jgeoffrey/Documents/HomeMovie/Test/year1video.mov.mov 沒有這樣的檔案或目錄
正如您所看到的,由於某種原因,文件擴展名在文件末尾添加了兩次?如果我導航到實際目錄,情況並非如此,它只存在一次。
是什麼原因導致這種情況發生以及如何解決?下面是腳本:
#Scanning Documents for any mov files
for f in $(find /home/jgeoffrey/Documents -type f -name "*.mov");
do
#checking if a .mp4 exists
mp4=${f%.mov}.mp4
#if no .mp4 exist convert the file
if ! lsof $f && [ ! -e "$mp4" ];
then
#Converting the file to .mp4
avconv -i $f.mov -codec copy $f.mp4
fi
done
答案1
在你的find
命令下:
find /home/jgeoffrey/Documents -type f -name "*.mov"
.mov
您正在使用變數尋找並迭代文件f
。所以變數的值$f
已經包含.mov
文件。例如,假設其中一個檔案是foo.mov
.
同樣,avconf
您已將輸入檔案用作$f.mov
,因此檔案名稱變為
foo.mov.mov
這正是錯誤所說的:
年1影片。mov.mov: 沒有這樣的檔案或目錄
所以你需要:
avconv -i "$f" -codec copy "$mp4"
as已包含已刪除和新增的$mp4
檔案名稱。.mov
.mp4
也要引用包含檔案名稱的變量,否則如果檔案名稱帶有空格,它將失敗。
另外,在循環換行符號分隔的檔案清單時,請使用while
, 而不是for
:
find .... | while IFS= read -r f; do .....