如何从 touch -A 参数的日期获取正确的格式?

如何从 touch -A 参数的日期获取正确的格式?

我想将某些文件的所有时间戳更改为即时日期。看来我需要使用touch -A *(或多或少;意识到我将使用更复杂的通配形式),但是它需要以下参数:[-][[hh]mm]SS

我如何哄骗date提供正确格式化的输出作为参数调用,以touch上面提供的格式完成此操作touch

答案1

我建议您不要担心更改文件的 ctime,这确实不值得这么麻烦(正如我在一两个月前为简单 MP3 播放器编写组织文件的脚本时发现的那样)。以及中讨论的方法那么问题我链接到上面,还有另一种直接的方法:将文件复制到临时名称,删除原始文件,然后重命名临时文件。当然,如果您想处理大量文件,这会对磁盘造成相当大的影响。

根据触摸手册页-A上面由 don_crissti 提供,您的版本中该选项的目的touch是允许您应用时间增量文件的当前 mtime 和/或 atime。因此,使用该-A选项将文件的 atime 和 mtime 设置为now意味着您必须计算now文件的现有 atime 和 mtime 之间的时间差,这是不必要的复杂化,正如我在评论中提到的那样。

将一组文件的 mtime 和 atime 设置为当前时间的最简单方法是简单地使用 touch 及其默认选项。或者,如果您希望文件全部具有完全相同的有时,首先触摸一个文件,然后使用触摸选项将其用作其余文件的参考文件-r

答案2

您可以使用命令替换为了这

$ touch -t $(date +%m%d%H%M) file

答案3

touchmacOS 上的实用程序有一个选项-A,允许您调整文件集的修改和访问时间戳(分别为“mtime”和“atime”),单位为小时数、分钟数和/或秒数。 在评论中,你似乎想要时间戳为当前时间,不调整它们。因此,该-A选项是错误的选择。

要将一组文件的 mtime 和 atime 时间戳更改为当前时间,请使用

touch -c pattern

其中pattern有一些与您想要访问的文件相匹配的模式。该-c选项可确保您在模式不匹配或提供包含不存在名称的显式文件列表时不会创建文件。

作为修改 mtime 和 atime 时间戳的副作用,ctime 时间戳(“inode 更改时间戳”)也将被修改。

设置btime(“出生时间戳”,其中可能就是你所说的“创建时间戳”在你的评论中),您可能需要使用(已弃用的)SetFile命令,该命令用于在 macOS 上“设置文件和目录的属性”。

SetFile -d "$(date +'%m/%d/%Y %H:%M:%S')" pattern

使用SetFile相同的日期戳字符串以及-m更新 mtime 的选项。以这种方式设置 btime 或 mtime 也会更新文件的 ctime。该SetFile实用程序不会/无法更新 atime 时间戳。

相关内容