更新文件创建日期×天数Mac OSX

问题描述:

我有一个视频文件夹(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

这对很显然很简单的东西很有趣!我认为这可行,但在一些示例文件上进行测试。我留下了我的调试语句,但您可以安全地删除所有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