簡體   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