我从有故障的硬盘驱动器中恢复了许多MOV文件,但是根据块位置命名这些文件的软件:
263505816.mov 等...
我写了一个使用mediainfo应用程序的小脚本,这样我就可以读取创建的日期和时间并相应地重命名文件:
for f in *.mov
do
MODIFIED=$(mediainfo -f $f |grep -m 1 "Encoded date" |sort -u |awk -F "UTC " '{print $2}')
DATECREATED=$(echo $MODIFIED |cut -d' ' -f 1)
TIMECREATED=$(echo $MODIFIED |cut -d' ' -f 2 |tr -s ':' '-')
mv $f "$DATECREATED $TIMECREATED.mov"
done
哪个工作正常但是当我通过在末尾添加2个单词来修改 mv 语句时:
mv $f "$DATECREATED $TIMECREATED Holidays 2011.mov"
我得到以下内容:
mv: target â Holidays 2011.movâ is not a directory
我知道我必须在某种程度上标记空格,因为mv误导它是一个目录。其他文章没有提到将多个变量与mv结合使用,这就是我要求指导的原因。
非常感谢,
答案 0 :(得分:1)
我认为这是第一次有效,因为*.mov
只扩展到数字文件,例如示例中的数字文件,但是在第一次执行脚本之后,它重命名了以{{1}形式引入空格的文件}。基本上,第二次,$DATECREATED $TIMECREATED.mov
正在尝试将mv
和$DATECREATED
移动到您的目标文件,并且因为它不是目录,所以它会失败。
您可以引用$TIMECREATED.mov
来解决此问题。试试这样:
$f
事实上,除非您确定他们不会包含特殊字符,否则建议您始终引用变量。
答案 1 :(得分:0)
在var scoopDay = Day()
之前和$DATECREATED
之后你有一些看起来像双引号的字符但不是这样,我的猜测。一些印刷报价。尝试使用普通双引号.mov
替换。 - 除了建议引用“$ f”(使用正确的双引号; - )