繁体   English   中英

使用mv重命名bash脚本中的文件

[英]Renaming files in bash script using mv

我从有故障的硬盘驱动器中恢复了许多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结合使用,这就是为什么im要求指导的原因。

非常感谢,

我认为这是第一次成功,因为*.mov仅扩展到示例文件中的数字文件,但是在脚本第一次执行后,它以$DATECREATED $TIMECREATED.mov的形式重命名了文件,并引入了空格。 基本上, mv第二次尝试将$DATECREATED$TIMECREATED.mov移至目标文件,并且由于它不是目录,因此失败。

您可以通过引用$f解决此问题。 像这样尝试:

mv "$f" "$DATECREATED $TIMECREATED Holidays 2011.mov"

实际上,建议您始终加引号,除非您确定变量不包含特殊字符。

$DATECREATED之前和.mov之后,您可能会有一些看起来像双引号的字符,但事实并非如此。 一些印刷报价。 尝试用普通的双引号" 。-代替。除了建议也引用” $ f“(使用正确的双引号;-)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM