2015-02-08 37 views
0

我有一個視頻文件夾(Mac OSX Yosemite),我需要通過將2180天添加到現有創建日期來更改創建日期。更新文件創建日期×天數Mac OSX

使用SetFile從終端我能夠操縱創建日期,比如我可以將其設置爲等同於同一個文件的修改日期:

SetFile -d "$(GetFileInfo -m /Users/myfilename.mov)" /Users/myfilename.mov 

但是,如果我嘗試添加「添加2180天部分停止工作:

SetFile -d "$(GetFileInfo -d /Users/myfilename.mov) +2180 days" /Users/myfilename.mov 

我懷疑這是用支架和語音標記一個問題,但下面沒有工作之一:

SetFile -d "$(GetFileInfo -d /Users/myfilename.mov +2180 days)" /Users/myfilename.mov 

究竟應該如何將「+2180天」加入其中?

Edi:Mark Setchell有一個解決方案,但我很想知道是否實際上有一種方法將「+2180天」合併到基於GetFileInfo的-d日期變量中。

+0

建議您閱讀'man SetFile'格式爲'-d date'的格式。 – user3439894 2015-02-08 23:37:49

+0

我看過,但無法解決我的問題。我可以找到日期格式的參考,但不知道yyddmm的實際格式與我的問題有什麼關係。 – MrDave 2015-02-09 09:29:14

+0

'SetFile'的手冊頁非常明確''-d date'需要什麼格式,爲什麼我建議你先讀'man SetFile'。請注意'GetFileInfo -d文件'的輸出在'SetFile -d date'需要的期望格式的約束範圍內。因此,人們必須以類似的方式做什麼,以便做數學運算,因爲這兩種公用程序都不能以您在OP中表達的方式直接解析數學。 – user3439894 2015-02-09 20:31:27

回答

0

這對很顯然很簡單的東西很有趣!我認爲這可行,但在一些示例文件上進行測試。我留下了我的調試語句,但您可以安全地刪除所有echo語句。

#!/bin/bash 
# Get name of file as supplied as parameter 
file=$1 

# Get its timestamp in format "02/08/2015 21:14:44" 
timestamp=$(GetFileInfo -d "$1") 
echo timestamp:$timestamp 

# Convert that to seconds since the Unix Epoch, e.g. 1423430084 
epoch=$(date -j -f "%m/%d/%Y %H:%M:%S" "$timestamp" +%s) 
echo epoch:$epoch 

# Calculate seconds in 2180 days 
((offset=2180*3600*24)) 
echo offset:$offset 

# Add offset to epoch 
((epoch+=offset)) 
echo new epoch:$epoch 

# Get new date in format that SetFile wants 
newdate=$(date -r $epoch "+%m/%d/%Y %H:%M:%S") 
echo new date:$newdate 

# And finally set the date of the input file 
SetFile -d "$newdate" "$file" 

保存爲ReDate,並使其可執行(只需要一次)與

chmod +x ReDate 

並運行它像這樣:

./ReDate /Users/myfilename.mov 

採樣運行:

./ReDate "/Users/Mark/tmp/file with sapce in name.mov" 
timestamp:02/09/2015 09:54:01 
epoch:1423475641 
offset:188352000 
new epoch:1611827641 
new date:01/28/2021 09:54:01 
+0

從OP中,它說:「...我需要通過添加2180天到現有創建日期來更改創建日期」,所以'timestamp = $(GetFileInfo -m「$ 1」)'需要是'timestamp = $( GetFileInfo -d「$ 1」)'。請注意,'-m'需要'-d'才能獲得文件創建日期,因爲前者獲取修改日期。 – user3439894 2015-02-09 10:33:34

+0

@ user3439894非常感謝您指出了這一點。它看起來像我的硬件部分是正確的,容易的部分是錯的:-)我從來沒有使用這些功能。希望現在是正確的。再次感謝。 – 2015-02-09 10:39:17

+0

這看起來不錯,但正如你所說的那樣令人驚訝的複雜。我需要很快找到一些時間來測試它。我可以檢查,是否真的沒有辦法將「+ x天數」併入SetFile命令行? – MrDave 2015-02-09 19:32:43