2015-10-21 44 views
0

不幸的是,我的shell技巧非常糟糕,我需要一些幫助才能在我的QNAP上運行一個簡單的腳本來修復某些視頻上的日期問題。外殼:用於在變量列表上

我到位的劇本是很容易的:

  1. 給定文件夾
  2. 檢查是否有開始VID_
  3. 如果是.mp4文件,爲他們每個人的運行給定exiftool命令

這裏是腳本,到目前爲止,但我想我沒有使用正確的方法來調用這個變量:

#!/bin/sh 

# set target directories 
dir="/share/Multimedia/Pictures/" 

# move to target directory 
cd "$dir" 

# check if there is some .mp4 file starting with "VID_" in the folder 

VID=$(ls -A $dir | grep 'VID_' | grep './mp4') 

if 
    ["$VID"]; 

then 

    # for each file in the list 
    for f in $VID 

     do 

     # change all date metadata according to its filename 
     exiftool "-*date<filename" -wm w $f 

done 

else 

fi 

感謝您的幫助!

PS:在exiftool指令是正確的(除了可能的變量)

+0

想要的文件名是什麼樣的?展示一些真實的例子?也可以把這個代碼放到http://www.shecllcheck.net去捕捉一些語法/等等。的問題。 –

+0

另請閱讀[解析ls(1)](http://mywiki.wooledge.org/ParsingLs)和[不要用'for for閱讀行](http://mywiki.wooledge.org/DontReadLinesWithFor)。 –

回答

0

不需要編寫腳本,這樣做只會減慢您的速度,因爲您必須爲每個文件調用ExifTool。 ExifTool可以做一個合格的所有文件:
ExifTool -ext mp4 '-*date<filename' -wm w /path/to/dir/VID_*

-ext mp4選項限制命令只是MP4文件。由於您似乎在Linux/Mac系統上,雙引號必須更改爲單引號。 Windows系統需要雙引號,linux/mac系統上需要單引號。

+0

感謝你,這更好(只是命令是Exiftool而不是ExifTool)! – giopas

0

您的代碼可能沒有由於使用的:

grep './mp4' 

由於沒有mp4之前沒有/

最好有你的腳本:

#!/bin/sh 

# set target directories 
dir="/share/Multimedia/Pictures/" 

# move to target directory 
cd "$dir" 

for f in VID_*.mp4; do 
    exiftool "-*date<filename" -wm w "$f" 
done 

沒有必要在這裏分析的ls輸出,沒有必要使用grep,因爲水珠VID_*.mp4會做正確的查找文件的工作。

+0

謝謝,我真的應該花一些時間在正則表達式上! – giopas

+0

如果解決了,[您可以通過點擊本答案左上方的**勾號**標記答案](http://meta.stackexchange.com/a/5235/160242) – anubhava