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