【问题标题】:Subtracting time from file creation/modification date in OSX从 OSX 中的文件创建/修改日期减去时间
【发布时间】:2011-11-06 15:44:22
【问题描述】:

我正在尝试将一系列文件的日期更改 9 小时。我已经达到了这一点:

for i in *.MOV; do touch -r "$i" -d "-9 hours" "$i"; done

这在最近的系统中应该可以工作,但是 OSX 中的 touch 命令似乎有点过时并且不支持 -d 开关。

我正在使用雪豹。关于使用单行命令执行此操作的最佳选择的任何想法?我不想为此创建脚本。

【问题讨论】:

  • 从 OS X Mavericks 开始,有一个 -A 选项可以为您执行此操作。
  • 有人应该编辑问题标题,以便正确反映实际提出的问题和给出的答案。这目前是“osx”命令行从时间戳中减去 60 秒的最高 Google 结果。标题模棱两可,听起来答案将提供解决该问题的信息,但实际问题和选择的答案仅与更改文件系统日期戳有关,而不是对一般的日期戳进行算术运算。此页面没有告诉我如何在 OS X 上的 BASH 中从时间戳中减去时间。
  • @JohnSmith 我相信问题和答案已经很清楚了,但是-d 开关允许处理相对日期,这意味着您可以有效地减去时间跨度。

标签: macos shell date touch osx-snow-leopard


【解决方案1】:

好的,解决了。 OSX 带有一个gtouch 命令,它知道-d 开关。它是 GNU coreutils 的一部分。有关特定 MacOS 版本的可用性信息,请参阅下面的 cmets。

有关通过-d 开关使用相对日期的更多信息,请参阅the manual

【讨论】:

  • 从 OS X Mavericks 开始,有一个 -A 选项可以为您执行此操作。
  • 已过时,也没有提供任何信息。 MacOS 不再包含 gtouch。 (至少,我的 Mojave 没有。)
  • @JohnSmith 它存在于我的 Mac OS Sierra 中,但我没有关于其他操作系统版本的信息。我已经更新了答案以指向 cmets 中的这些信息。
【解决方案2】:

看看Wikipedia Page for Touch,您似乎已经习惯了 GNU 版本的 Touch。哪个 MacOS 没有使用。

对于您想要执行的操作,请查看随 XCode 工具一起安装的“SetFile”命令。您有 -d 和 -m 选项,它们分别重置 Created 和 Modified 日期和时间。

http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/SetFile.1.html

【讨论】:

  • SetFile 也允许移动日期吗?我知道我可以使用 SetFile 的 -d 开关来设置日期和时间,但找不到一个可以将它移动几个小时
  • AFAIK,SetFile 中没有“-d '-9 hours'”功能。我的建议是格式化日期(使用 thekashyap 的答案),然后将其作为要通过 SetFile 设置的日期和时间传递。查看我发布的文档链接,您可以看到 SetFile 期望设置日期和时间的格式。
【解决方案3】:

Donno OS X,但它应该很容易

get curr time stamp on the file
convert it to seconds
subtract 9 hours (9*60*60 secs) from it
convert it back to the format accepted by touch's -t option
run touch command

当然,所有这些都可以在命令行的单个 for 循环中完成。

这里是来自WikiPedia 的简单示例,显示了来回转换。

# To convert a specific time stamp to Unix epoch time (seconds since 1970-01-01):
date +"%s" -d "Fri Apr 24 13:14:39 CDT 2009"
# 1240596879

# To convert Unix epoch time (seconds since 1970-01-01) to a human readable format:
date -d "UTC 1970-01-01 1240596879 secs"
# Fri Apr 24 13:14:39 CDT 2009

# Or:
date -ud @1000000000
# Sun Sep  9 01:46:40 UTC 2001

# or: Haven't tested this but should work..
date -d @1000000000 +%y%m%d%%H%M%S
# 010909014640

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-24
    • 1970-01-01
    相关资源
    最近更新 更多