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

时间:2016-10-23 20:30:43

标签: linux bash 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结合使用,这就是我要求指导的原因。

非常感谢,

2 个答案:

答案 0 :(得分:1)

我认为这是第一次有效,因为*.mov只扩展到数字文件,例如示例中的数字文件,但是在第一次执行脚本之后,它重命名了以{{1}形式引入空格的文件}。基本上,第二次,$DATECREATED $TIMECREATED.mov正在尝试将mv$DATECREATED移动到您的目标文件,并且因为它不是目录,所以它会失败。

您可以引用$TIMECREATED.mov来解决此问题。试试这样:

$f

事实上,除非您确定他们不会包含特殊字符,否则建议您始终引用变量。

答案 1 :(得分:0)

var scoopDay = Day() 之前和$DATECREATED之后你有一些看起来像双引号的字符但不是这样,我的猜测。一些印刷报价。尝试使用普通双引号.mov替换。 - 除了建议引用“$ f”(使用正确的双引号; - )