macos - 将文件创建日期更新 x 天 Mac OSX

标签 macos bash shell datetime

我有一个视频文件夹 (Mac OSX Yosemite),我需要通过在现有创建日期的基础上添加 2180 天来更改创建日期。

从终端使用 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

关于macos - 将文件创建日期更新 x 天 Mac OSX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28400578/

相关文章:

ios - objective-c 中大于38位数字的乘法或除法

objective-c - NSControl 和 sendActionsForControlEvents 类型

bash - 这个文件重命名循环有什么问题?

regex - grep : Regex for IP doesnt match

linux - 查看核心转储何时完成

html - 实现浏览器的 'Download to Computer'功能

Mysql 5.5.10 - Mac 10.6.x - 自动启动

java - 使用 Jsch 和 Java 将 System.out 复制到文件

linux - 检测 '/proc' 文件系统的正确方法?

linux - 有没有办法可以使用 "if"分支来检查 U 盘是否已连接?