更新文件创建日期×天数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日期变量中。
这对很显然很简单的东西很有趣!我认为这可行,但在一些示例文件上进行测试。我留下了我的调试语句,但您可以安全地删除所有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
从OP中,它说:“...我需要通过添加2180天到现有创建日期来更改创建日期”,所以'timestamp = $(GetFileInfo -m“$ 1”)'需要是'timestamp = $( GetFileInfo -d“$ 1”)'。请注意,'-m'需要'-d'才能获得文件创建日期,因为前者获取修改日期。 – user3439894 2015-02-09 10:33:34
@ user3439894非常感谢您指出了这一点。它看起来像我的硬件部分是正确的,容易的部分是错的:-)我从来没有使用这些功能。希望现在是正确的。再次感谢。 – 2015-02-09 10:39:17
这看起来不错,但正如你所说的那样令人惊讶的复杂。我需要很快找到一些时间来测试它。我可以检查,是否真的没有办法将“+ x天数”并入SetFile命令行? – MrDave 2015-02-09 19:32:43
建议您阅读'man SetFile'格式为'-d date'的格式。 – user3439894 2015-02-08 23:37:49
我看过,但无法解决我的问题。我可以找到日期格式的参考,但不知道yyddmm的实际格式与我的问题有什么关系。 – MrDave 2015-02-09 09:29:14
'SetFile'的手册页非常明确''-d date'需要什么格式,为什么我建议你先读'man SetFile'。请注意'GetFileInfo -d文件'的输出在'SetFile -d date'需要的期望格式的约束范围内。因此,人们必须以类似的方式做什么,以便做数学运算,因为这两种公用程序都不能以您在OP中表达的方式直接解析数学。 – user3439894 2015-02-09 20:31:27