2017-06-12 45 views
1

我想寫一個bash for-loop並用exiftool覆蓋jpg元數據,但是一個特定的命令在循環中不起作用。我想覆蓋與原始日期時間數據的gpstimestamp,這個工作如果在命令行中執行,而不是在腳本..Exiftool命令在Bash for-loop不起作用

for f in $(ls *.jpg); do 

    [... stuff that works] 

    exiftool "-gpstimestamp<datetimeoriginal" $f 
done 

任何想法,爲什麼這不是在循環工作?

+0

(1)不要解析的'ls'這個輸出[parsing ls](http://mywiki.wooledge.org/ParsingLs)是[bash陷阱](http://mywiki.wooledge.org/BashPitfalls#for_i_in_)的大列表中的第一個*條目。 24.28ls_.2A.mp3.29)。 (2)引用你的變量。如果您需要幫助,最好告訴我們如何解決問題。 「這不起作用」是不夠的 - 包括任何錯誤信息,或者顯示錯誤的行爲,描述你的期望,以及你如何發現差異。 – ghoti

回答

1

的for循環可以以更簡單的方式來完成:

#!/bin/bash 
for f in *.jpg 
do 

    [... stuff that works] 

    exiftool "-gpstimestamp<datetimeoriginal" $f 
done 

注意:不是你運行一個for循環,你可以執行exiftool到 過程中使用目錄中的所有*.jpg文件:

exiftool info

exiftool "-gpstimestamp<datetimeoriginal" -ext jpg . 

exiftool man

-ext EXT(-extension)過程與指定的擴展

+0

感謝您的提示!但是「-gpstimestamp upgrd

+0

@upgrd - 你得到了哪個錯誤? – Yaron

+1

它的工作原理! Mea culpa,我嘗試了jpeg文件,而不是jpg ... facepalm !!!! :d – upgrd

1

Exiftool文件並不需要在一個循環中運行,並會更快地進行,而不(Exiftool common mistake 3)。

使用此命令你的循環
exiftool '-gpstimestamp<datetimeoriginal' -ext jpg /path/to/target/dir

後直接這將複製到DateTimeOriginal爲在目標目錄中的所有JPG文件。您可以添加-r以遞歸到子目錄中。你需要考慮到

的一件事是事實,預計將UTC時間和DateTimeOriginal通常是拍攝圖像的時區。