系统学习 macOS 学习路径:从 BSD 文件命令到系统、网络与开发维护

touch

创建空文件或更新访问、修改时间,常用于脚本时间戳与构建标记。

补充说明

touch 默认把文件的访问时间和修改时间更新为当前时间;文件不存在时创建一个空文件,权限由 0666 与 umask 决定。-a 只改访问时间,-m 只改修改时间,-c 在文件不存在时不创建,-r 参考文件 复制另一个文件的时间,-h 修改符号链接自身的时间(隐含 -c)。

BSD 与 GNU 的差异集中在时间参数:macOS 的 -d 只接受 YYYY-MM-DDThh:mm:SS[.frac][tz] 这类格式,不能写 GNU 的 next Friday、yesterday 等自然语言;GNU 还有 --date、--reference、--no-create 长选项,macOS 没有。-t 的格式是 [[CC]YY]MMDDhhmm[.SS],两位年份的解释规则容易踩坑,脚本里优先用四位数年份。

touch 不会改变文件的创建时间(birth time),也不会修改 ACL、扩展属性或文件内容。APFS 支持纳秒级时间戳,用 stat -f '%Sm %SB' 可以分别查看修改时间和创建时间。

常用示例

# 创建空文件
% touch newfile.txt

# 文件不存在时不创建,只更新时间
% touch -c existing.txt

# 用固定时间设置构建标记,格式为 YYYYMMDDhhmm
% touch -t 202610220900 .build-stamp

# 带时区的 ISO 时间,Z 表示 UTC
% touch -d '2026-10-22T09:00:00Z' .deploy-ok

# 复制参考文件的时间,便于让产物与源文件时间一致
% touch -r source.swift build/output.swift

# 只改符号链接自身的时间,不碰目标文件
% touch -h ~/Desktop/link

# 验证修改时间与创建时间
% stat -f 'mtime=%Sm birth=%SB' .build-stamp

易错点与排错

相关命令

参考链接

读完自测

合上页面,先回答,再展开对照。

  1. macOS 的 touch -d 与 GNU 的 touch -d 最大差别是什么?
  2. touch 能修改文件的创建时间吗?不能的话它改的是什么?
  3. touch -h 对符号链接做了什么,为什么可能“没有创建文件”?
答案
  1. macOS 只接受固定的 ISO 风格时间,GNU 支持 yesterday 等自然语言解析。
  2. 不能修改创建时间;它更新访问时间和修改时间。
  3. 修改链接自身的时间,且 -h 隐含 -c,链接不存在时不会创建。
微信小程序码:扫码打开命令速查小程序

小程序版

微信扫码,随时查命令