腳本追加擴展兩次

腳本追加擴展兩次

我正在運行一個快速 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 .....

相關內容