0

我想自动化修复某些视频的索引的过程。下面是我的代码。

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 上运行它。关于可能导致这种情况的任何想法?

4

2 回答 2

1

正如其他人指出的那样,您不需要手动转义文件名中的空格。但是,您也不需要使用sed来修改路径。

for f in ~/Videos/Temp/*
do
    mencoder -forceidx "$f" -o "${f/Temp/Fixed}" -oac copy -ovc copy
done

只有第一次出现的“Temp”被替换为“Fixed”,因此您不必担心文件名中的意外替换。

于 2012-05-25T13:14:59.497 回答
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

于 2012-05-25T07:24:43.860 回答