我想自动修复某些视频的索引编制过程。以下是我的代码。
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上运行它。关于可能导致这种情况的任何想法?
答案 0 :(得分:1)
正如其他人所指出的那样,您无需手动转义文件名中的空格。但是,您也不需要使用sed
来修改路径。
for f in ~/Videos/Temp/*
do
mencoder -forceidx "$f" -o "${f/Temp/Fixed}" -oac copy -ovc copy
done
只有第一次出现的“Temp”被替换为“Fixed”,因此您无需担心文件名中的意外替换。
答案 1 :(得分:0)
find ~/Videos/Temp/ -type f -print0 | while IFS= read -r -d $'\0' f; do
name=$(echo "$f" | sed 's/Temp/Fixed/1')
mencoder -forceidx "$f" -o "$name" -oac copy -ovc copy
done