名称

touch - 更改文件时间戳

简介

touch [选项]... 文件...

描述

touch 命令用于更新文件的访问时间和修改时间。如果文件不存在,默认情况下会创建一个新的空文件。该命令主要用于:

  • 创建新的空文件。

  • 将现有文件的时间戳更新为当前时间。

  • 强制将文件时间戳设置为特定日期和时间。

## 选项

短选项

长选项

描述

-a

--time=atime

仅更改访问时间。

-m

--time=mtime

仅更改修改时间。

-c

--no-create

不创建任何文件(仅当文件已存在时才更新时间戳)。

-d

--date=字符串

使用指定的日期时间字符串(而非当前时间)解析后设置时间戳。

-r

--reference=参考文件

将文件的时间戳设置为与参考文件相同(不指定具体时间)。

-t

使用 [[CC]YY]MMDDhhmm[.ss] 格式的时间戳(而非当前时间)。

--time=WORD

指定要更改的时间类型:accessatimemodifymtime 等。

--help

显示帮助信息并退出。

--version

显示版本信息并退出。

退出状态

  • 0 – 成功。

  • >0 – 发生错误(例如文件无法访问、无效日期格式等)。

常用示例

1. 创建空文件

touch newfile.txt

如果文件不存在,则创建一个空文件;如果存在,则将其访问和修改时间更新为当前时间。

2. 更新现有文件的时间戳

touch existing.txt

existing.txt 的访问和修改时间都改为当前时间。

3. 仅更改访问时间

touch -a file.txt

4. 仅更改修改时间

touch -m file.txt

5. 不创建新文件(仅更新时间戳)

touch -c maybe_exists.txt

如果文件不存在,则不会创建它,也不报错。

6. 将文件时间戳设置为特定日期时间(使用 -t)

touch -t 202503151430 file.txt

file.txt 的时间戳设置为 2025 年 3 月 15 日 14 时 30 分(格式:[[CC]YY]MMDDhhmm[.ss])。

7. 使用 -d 设置时间(更灵活)

touch -d "2025-03-15 14:30:00" file.txt

或者使用相对时间:

touch -d "yesterday" file.txt
touch -d "next Friday" file.txt

8. 参考另一个文件的时间戳

touch -r reference.txt target.txt

target.txt 的时间戳设置为与 reference.txt 相同。

9. 同时设置访问时间和修改时间为不同值

touch -a -t 202503151200 file.txt   # 访问时间改为 2025-03-15 12:00
touch -m -t 202503151800 file.txt   # 修改时间改为 2025-03-15 18:00

10. 批量创建多个文件

touch file1.txt file2.txt file3.txt

11. 结合通配符使用(谨慎)

touch *.txt

更新所有 .txt 文件的时间戳。

12. 使用 find 找到旧文件并更新时间戳

find . -name "*.log" -mtime +30 -exec touch {} \;

将 30 天前修改过的 .log 文件时间戳更新为当前时间。

注意事项

  • 如果没有提供任何选项,touch 会同时更新文件的访问时间和修改时间。

  • 使用 -c 选项可以防止意外创建新文件,在脚本中很有用。

  • -t 参数格式严格:[[CC]YY]MMDDhhmm[.ss],世纪 CC 可省略(默认为当前世纪)。年份 YY 范围为 00-99,月份 MM 01-12,日 DD 01-31,时 hh 00-23,分 mm 00-59,秒 .ss 可选。

  • -d 选项接受多种自然语言日期格式,如 "2025-03-15 14:30""2 days ago" 等,但具体支持程度取决于系统(GNU 扩展)。

  • 如果目标文件是一个符号链接,touch 默认操作链接文件本身的时间戳。若希望操作链接指向的文件,需使用 -h 选项(GNU 版本支持)。

  • 某些 Unix 系统可能没有 -d 选项,此时只能使用 -t 设置精确时间。

  • 创建文件时,touch 会使用当前用户的默认权限(受 umask 影响)。

相关命令

  • stat – 显示文件详细状态信息(包括时间戳)。

  • ls -l – 查看文件修改时间。

  • ls -lu – 查看文件访问时间。

  • ls -lc – 查看文件状态更改时间。

  • find – 根据时间戳查找文件。

  • date – 显示或设置系统日期时间。