脚本附加两次扩展

脚本附加两次扩展

我正在运行一个快速 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 

错误信息确实如此:

year1视频。mov.mov: 没有这样的文件或目录

因此你需要:

avconv -i "$f" -codec copy "$mp4"

因为已经包含删除和添加的$mp4文件名。.mov.mp4

还要引用包含文件名的变量,否则如果文件名中有空格,它将失败。

此外,在循环遍历以换行符分隔的文件列表时,使用while, 而不是for

find .... | while IFS= read -r f; do .....

相关内容