Linux / 命令 / touch / 创建空文件并更改最后修改时间
在 Linux 中,如果文件不存在,touch 会创建一个空文件;如果文件已存在,它会默认将访问和修改时间更新为当前时间。它不会清除现有文件的内容,但可能会影响依赖时间信息的备份或构建操作。
创建空文件
以下命令将在当前目录中创建一个空文件,如果 example.txt 不存在的话。后续示例基于 GNU coreutils 的 touch 和 stat。请在一个独立的空练习目录中运行它们,以避免影响现有数据。
touch example.txt
ls -l example.txt
列表中将出现一个大小为 0 的文件。如果已经存在同名文件,它不会被新的空文件覆盖,而是会更新现有文件的时间。如果名称中包含空格,请像 touch "my notes.txt" 那样用引号括起来。如果列出了多个以空格分隔的名称,将对每个名称进行处理。
检查和更新现有文件的时间
文件的访问时间(atime)与最后访问相关,修改时间(mtime)与文件内容的最后修改相关。默认情况下,touch example.txt 会将这两个时间设置为当前时间。你可以在更改前后进行如下检查。
stat example.txt
touch example.txt
stat example.txt
比较 stat 输出中 Access 和 Modify 的条目。实际的输出语言和显示格式可能因环境而异,并且由于文件系统的时间分辨率,非常短的时间间隔内的差异可能无法显示。
状态更改时间 (ctime) 与权限等元数据的更改相关,并不等同于创建时间。使用 touch 更改时间信息也可能会更新 ctime,但你不能将 ctime 设置为任意值,也无法更改创建时间。是否在每次读取时更新访问时间,也会受到文件系统和挂载设置的影响。你可以查看 GNU 文件时间描述 来了解每个时间的含义。
仅更改访问时间或修改时间
-a 仅选择访问时间,-m 仅选择修改时间。下面是将一个练习文件的修改时间更改为当前时间并检查结果的示例。
touch -m example.txt
stat example.txt
-a 选择访问时间,而 -m 选择修改时间。这并不意味着文件的状态更改时间会被保留。如果文件不存在,会创建一个空文件,除非指定了其他选项。
使用所需的时间或来自另一个文件的时间
您可以使用 GNU touch -d 指定日期和时间。以下示例将练习文件的访问和修改时间设置为指定时间。
touch -d '2024-01-15 10:30:00' example.txt
stat example.txt
如果未单独指定时区,将根据环境变量TZ或系统时区进行解释。请验证输出的访问时间和修改时间是否与指定值匹配。保存的值可能会因文件系统支持的范围和分辨率而有所不同。
要使用另一个文件作为参考,请使用-r。以下是在当前目录中同时存在reference.txt和example.txt时的示例。
touch -r reference.txt example.txt
stat reference.txt example.txt
将目标文件的访问时间和修改时间设置为参考文件的值。如果参考文件不存在,将发生错误,并且默认情况下,如果目标文件不存在,可能会创建一个空文件。有关详细选项,请参阅GNU touch 手册。
仅更新时间而不创建文件
-c 如果指定的文件不存在,则不会创建新文件。以下命令会在文件已存在时将时间更新为当前时间,如果文件不存在,则不会创建它。
touch -c example.txt
由于即使文件不存在也可以无错误地完成,因此不要仅使用此命令的成功状态来检查文件是否存在。要创建新文件,需要对父目录具有写权限,而更改现有文件时间的权限取决于文件所有者和要设置的时间。如果发生错误,请检查路径和权限。




