Linux touch 命令指南大全

2023年 8月 15日 86.4k 0

1. 概述

在本教程中,我们将学习touch命令。简而言之,这个命令允许我们更新文件或目录的最后修改时间和最后访问时间。

因此,我们将重点关注如何使用该命令及其各种选项。

请注意,我们使用 Bash 测试了此处显示的所有命令;但是,它们应该与任何兼容 POSIX 的 shell 一起使用。

2. 默认行为

通过执行touch,文件系统上的一个或多个文件或目录将被更新,以便将它们的上次修改时间和上次访问时间设置为当前系统时间。

那么,假设今天的日期是 2020 年 2 月 1 日,时间是上午 7:00。

如上所述,该命令将更新example-file.txt文件的两个时间戳:

# ls -l example-file.txt
-rw-r--r--  1 baeldung  baeldung  0 Jan  1 20:00 example-file.txt

# touch example-file.txt

# ls -l example-file.txt
-rw-r--r--  1 baeldung  baeldung  0 Feb  1 07:00 example-file.txt复制

Linux touch 命令指南大全-1

2.1. 创建新文件

此外,当指定的文件不存在时,该命令将创建一个空文件并相应地设置时间:

# ls -l sample-file.txt
ls: sample-file.txt: No such file or directory

# touch sample-file.txt

# ls -l sample-file.txt
-rw-r--r--  1 baeldung  baeldung  0 Feb  1 07:00 sample-file.txt复制

Linux touch 命令指南大全-1

如果创建新文件,则新创建文件的权限将默认为给定文件系统的标准权限。

2.2. 具有多个文件或目录

如果指定了多个文件或目录,该命令将更新所有文件或目录的时间戳:

# ls -l example-file.txt sample-file.txt example-dir
drw-r--r--  1 baeldung  baeldung  0 Jan  1 22:00 example-dir
-rw-r--r--  1 baeldung  baeldung  0 Jan  1 20:00 example-file.txt
-rw-r--r--  1 baeldung  baeldung  0 Jan  1 16:00 sample-file.txt

# touch example-file.txt sample-file.txt example-dir

# ls -l example-file.txt sample-file.txt example-dir
drw-r--r--  1 baeldung  baeldung  0 Feb  1 07:00 example-dir
-rw-r--r--  1 baeldung  baeldung  0 Feb  1 07:00 example-file.txt 
-rw-r--r--  1 baeldung  baeldung  0 Feb  1 07:00 sample-file.txt复制

Linux touch 命令指南大全-1

3. 定义具体时间

或者,我们可以使用-t选项定义要设置的时间戳。因此,这会更改使用系统时间的默认行为,而是使用选项设置指定的时间。使用此选项指定时间的格式为“ [[CC]YY]MMDDhhmm[.SS] ”:

  • CC:世纪
  • YY:年份的后两位数字;如果指定了YY ,但未指定 CC ,则 69 到 99 之间的 YY值将导致CC值为 19;否则,使用CC值 20
  • MM : 一年中的月份 (01-12)
  • DD : 一个月中的哪一天 (01-31)
  • hh:一天中的小时 (00-23)
  • mm:一小时中的分钟 (00-59)
  • SS : 分钟的第二个 (00-59)

因此,要使用我们定义的时间戳更新文件或目录,我们可以执行:

# ls -l sample-file.txt
-rw-r--r--  1 baeldung  baeldung  0 Jan 20 19:00 sample-file.txt
 
# touch -t 202001262359.59 sample-file.txt

# ls -l sample-file.txt
-rw-r--r--  1 baeldung  baeldung  0 Jan 26 23:59 sample-file.txt
复制

Linux touch 命令指南大全-1

当未指定CC和YY时,它们默认为当前年份:

# ls -l sample-file.txt
-rw-r--r--  1 baeldung  baeldung  0 Jan 20 19:00 sample-file.txt

# touch -t 01282359.59 sample-file.txt

# ls -l sample-file.txt
-rw-r--r--  1 baeldung  baeldung  0 Jan 28 23:59 sample-file.txt复制

Linux touch 命令指南大全-1

如果未指定SS ,则该值默认为 0。

4. 调整时间

默认行为的另一种替代方法是相对更改时间,而不是显式设置或使用系统时间。使用*-A*允许我们调整文件或目录相对于其当前时间戳的时间戳。用于指定时间调整的格式为“ [-][[hh]mm]SS ”:

  • -:使调整为负值
  • hh : 小时数 (00-99)
  • mm : 分钟数 (00-59)
  • SS : 秒数 (00-59)

因此,要将访问时间调整-25小时,我们执行:

# ls -l sample-file.txt
-rw-r--r--  1 baeldung  baeldung  0 Jan 27 22:59 sample-file.txt

# touch -A -250000 sample-file.txt

# ls -l sample-file.txt 
-rw-r--r--  1 baeldung  baeldung  0 Jan 26 21:59 sample-file.txt复制

Linux touch 命令指南大全-1

5. 其他选项

5.1. 使用参考文件中的时间戳

-r选项使用指定参考文件中的时间戳作为更新时使用的时间戳。在这里,使用-r运行命令会获取example-file.txt中的时间戳并将其应用到example-file.txt:

# ls -l example-file.txt sample-file.txt
-rw-r--r--  1 baeldung  baeldung  0 Feb  1 17:00 example-file.txt
-rw-r--r--  1 baeldung  baeldung  0 Jan 23 22:45 sample-file.txt

# touch -r example-file.txt sample-file.txt

# ls -l example-file.txt sample-file.txt
-rw-r--r-- 1 baeldung baeldung 0 Feb 1 17:00 example-file.txt 
-rw-r--r-- 1 baeldung baeldung 0 Feb 1 17:00 sample-file.txt复制

Linux touch 命令指南大全-1

5.2. 使用符号链接

如果我们对文件或目录的符号链接执行该命令,则链接目标的时间戳会更新:

# ls -l example-file.txt link-to-example-file.txt
-rw-r--r--  1 baeldung  baeldung  0 Jan 23 22:00 example-file.txt
lrw-r--r--  1 baeldung  baeldung  0 Jan 23 22:30 link-to-example-file.txt -> example-file.txt

# touch example-file-link.txt

# ls -l example-file.txt link-to-example-file.txt
-rw-r--r--  1 baeldung  baeldung 0  Feb  1 07:00 example-file.txt
lrw-r--r--  1 baeldung  baeldung 0  Jan 23 22:30 link-to-example-file.txt -> example-file.txt复制

Linux touch 命令指南大全-1

使用*-h*,我们可以更新目标文件或目录的符号链接的时间戳,而不是目标本身。

5.3. 防止文件创建

我们可以使用*-c*禁用文件创建。使用此选项执行时,如果文件不存在,则该命令不执行任何操作:

# ls -l sample-file.txt
ls: sample-file.txt: No such file or directory

# touch -c sample-file.txt

# ls -l sample-file.txt
ls: sample-file.txt: No such file or directory复制

Linux touch 命令指南大全-1

5.4. 仅更新上次访问时间

如果我们只想更新文件或目录的上次访问时间,我们可以使用*-a*选项:

# ls -l sample-file.txt
-rw-r--r--  1 baeldung  baeldung  0 Jan 20 19:00 sample-file.txt

# ls -l -u sample-file.txt
-rw-r--r--  1 baeldung  baeldung  0 Jan 20 19:00 sample-file.txt  

# touch -a sample-file.txt

# ls -l sample-file.txt
-rw-r--r--  1 baeldung  baeldung  0 Jan 20 19:00 sample-file.txt

# ls -l -u sample-file.txt
-rw-r--r--  1 baeldung  baeldung  0 Feb  1 07:00 sample-file.txt
复制

Linux touch 命令指南大全-1

如前所述,默认行为是更新上次访问时间和上次修改时间。使用此选项会覆盖设置两个时间戳的默认行为。一起使用 -a 和 -m 会导致更新两个时间戳的默认行为。

5.5. 仅更新上次修改时间

同样,如果我们只想更新文件或目录的最后修改时间,我们可以使用*-m* 选项:

# ls -l sample-file.txt
-rw-r--r--  1 baeldung  baeldung  0 Jan 20 19:00 sample-file.txt

# ls -l -u sample-file.txt 
-rw-r--r--  1 baeldung  baeldung  0 Jan 20 19:00 sample-file.txt

# touch -m sample-file.txt

# ls -l sample-file.txt
-rw-r--r--  1 baeldung  baeldung  0 Feb  1 07:00 sample-file.txt

# ls -l -u sample-file.txt
-rw-r--r--  1 baeldung  baeldung  0 Jan 20 19:00 sample-file.txt
复制

Linux touch 命令指南大全-1

6. 兼容性

为了保持与旧版 BSD 系统上触摸的向后兼容性,仍然支持一些过时的功能和选项。

它允许我们首先以“ MMDDhhmm[YY] ”格式指定时间格式,后跟要在文件系统上更新的文件或目录的名称。

MM 、DD、hh和mm字母对的处理方式与*-t选项指定的对应* 字母对相同。如果YY介于 39 和 99 之间,则年份为 20 世纪。否则,年份为 21 世纪:

# ls -l sample-file.txt
-rw-r--r--  1 baeldung  baeldung  0 Feb 10 12:00 sample-file.txt

# touch 0123000020 sample-file.txt

# ls -l sample-file.txt
-rw-r--r--  1 baeldung  baeldung  0 Jan 23 00:00 sample-file.txt
复制

Linux touch 命令指南大全-1

该命令曾经能够使用*-f*选项强制更新文件。然而,这个选项现在被忽略了。

七、结论

在本文中,我们探讨了touch命令行实用程序、其各种选项及其向后兼容性。

总之,当我们不需要对文件进行任何更改,但我们想要更新其上次访问或上次修改时间时,触摸会很方便。

相关文章

服务器端口转发,带你了解服务器端口转发
服务器开放端口,服务器开放端口的步骤
产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
如何使用 WinGet 下载 Microsoft Store 应用
百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

发布评论