我想将某些文件的所有时间戳更改为即时日期。看来我需要使用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
touch
macOS 上的实用程序有一个选项-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 时间戳。