我从有故障的硬盘恢复了许多 MOV 文件,但是软件根据 block 位置命名这些文件:
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 结合使用,这就是我寻求指导的原因。
非常感谢,
最佳答案
我认为它第一次工作是因为 *.mov
只扩展到数字文件,就像你的例子中的那个,但是在你的脚本第一次执行之后,它重命名了文件,在形成 $DATECREATED $TIMECREATED.mov
。基本上,第二次,mv
试图将 $DATECREATED
和 $TIMECREATED.mov
移动到您的目标文件,因为它不是目录,它失败了。
您可以通过引用 $f
来解决这个问题。像这样尝试:
mv "$f" "$DATECREATED $TIMECREATED Holidays 2011.mov"
事实上,除非您确定变量不包含特殊字符,否则建议您始终使用引号引起来。
关于linux - 使用 mv 在 bash 脚本中重命名文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40207499/