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