1. 概述

在本教程中,咱们将学习touch指令。简而言之,这个指令答应咱们更新文件或目录的最终修正时刻和最终拜访时刻。

因此,咱们将要点关注怎么运用该指令及其各种选项。

请注意,咱们运用 Bash 测试了此处显示的一切指令;可是,它们应该与任何兼容 POSIX 的 shell 一同运用。

2. 默许行为

经过履行touch,文件体系上的一个或多个文件或目录将被更新,以便将它们的前次修正时刻和前次拜访时刻设置为当时体系时刻。

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

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

<span style="color:#000000"><span style="background-color:#ffffff"><code class="language-bash"><span style="color:#888888"># ls -l example-file.txt</span>
-rw-r--r--  1 baeldung  baeldung  0 Jan  1 20:00 example-file.txt
<span style="color:#888888"># touch example-file.txt</span>
<span style="color:#888888"># ls -l example-file.txt</span>
-rw-r--r--  1 baeldung  baeldung  0 Feb  1 07:00 example-file.txt</code>仿制</span></span>

Linux touch 命令指南大全

2.1.创立新文件

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

<span style="color:#000000"><span style="background-color:#ffffff"><code class="language-bash"><span style="color:#888888"># ls -l sample-file.txt</span>
<span style="color:#397300">ls</span>: sample-file.txt: No such file or directory
<span style="color:#888888"># touch sample-file.txt</span>
<span style="color:#888888"># ls -l sample-file.txt</span>
-rw-r--r--  1 baeldung  baeldung  0 Feb  1 07:00 sample-file.txt</code>仿制</span></span>

Linux touch 命令指南大全

假如创立新文件,则新创立文件的权限将默以为给定文件体系的规范权限。

2.2.具有多个文件或目录

假如指定了多个文件或目录,该指令将更新一切文件或目录的时刻戳:

<span style="color:#000000"><span style="background-color:#ffffff"><code class="language-bash"><span style="color:#888888"># ls -l example-file.txt sample-file.txt example-dir</span>
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
<span style="color:#888888"># touch example-file.txt sample-file.txt example-dir</span>
<span style="color:#888888"># ls -l example-file.txt sample-file.txt example-dir</span>
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</code>仿制</span></span>

Linux touch 命令指南大全

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)

因此,要运用咱们界说的时刻戳更新文件或目录,咱们可以履行:

<span style="color:#000000"><span style="background-color:#ffffff"><code class="language-bash"><span style="color:#888888"># ls -l sample-file.txt</span>
-rw-r--r--  1 baeldung  baeldung  0 Jan 20 19:00 sample-file.txt
<span style="color:#888888"># touch -t 202001262359.59 sample-file.txt</span>
<span style="color:#888888"># ls -l sample-file.txt</span>
-rw-r--r--  1 baeldung  baeldung  0 Jan 26 23:59 sample-file.txt
</code>仿制</span></span>

Linux touch 命令指南大全

当未指定CCYY时,它们默以为当时年份:

<span style="color:#000000"><span style="background-color:#ffffff"><code class="language-bash"><span style="color:#888888"># ls -l sample-file.txt</span>
-rw-r--r--  1 baeldung  baeldung  0 Jan 20 19:00 sample-file.txt
<span style="color:#888888"># touch -t 01282359.59 sample-file.txt</span>
<span style="color:#888888"># ls -l sample-file.txt</span>
-rw-r--r--  1 baeldung  baeldung  0 Jan 28 23:59 sample-file.txt</code>仿制</span></span>

Linux touch 命令指南大全

假如未指定SS ,则该值默以为 0。

4. 调整时刻

默许行为的另一种替代方法是相对更改时刻,而不是显式设置或运用体系时刻。运用*-A*答应咱们调整文件或目录相对于其当时时刻戳的时刻戳。用于指定时刻调整的格局为“[-][[hh]mm]SS”:

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

因此,要将拜访时刻调整-25小时,咱们履行:

<span style="color:#000000"><span style="background-color:#ffffff"><code class="language-bash"><span style="color:#888888"># ls -l sample-file.txt</span>
-rw-r--r--  1 baeldung  baeldung  0 Jan 27 22:59 sample-file.txt
<span style="color:#888888"># touch -A -250000 sample-file.txt</span>
<span style="color:#888888"># ls -l sample-file.txt </span>
-rw-r--r--  1 baeldung  baeldung  0 Jan 26 21:59 sample-file.txt</code>仿制</span></span>

Linux touch 命令指南大全

5. 其他选项

5.1.运用参考文件中的时刻戳

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

<span style="color:#000000"><span style="background-color:#ffffff"><code class="language-bash"><span style="color:#888888"># ls -l example-file.txt sample-file.txt</span>
-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
<span style="color:#888888"># touch -r example-file.txt sample-file.txt</span>
<span style="color:#888888"># ls -l example-file.txt sample-file.txt</span>
-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</code>仿制</span></span>

Linux touch 命令指南大全

5.2.运用符号链接

假如咱们对文件或目录的符号链接履行该指令,则链接方针的时刻戳会更新:

<span style="color:#000000"><span style="background-color:#ffffff"><code class="language-bash"><span style="color:#888888"># ls -l example-file.txt link-to-example-file.txt</span>
-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
<span style="color:#888888"># touch example-file-link.txt</span>
<span style="color:#888888"># ls -l example-file.txt link-to-example-file.txt</span>
-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</code>仿制</span></span>

Linux touch 命令指南大全

运用*-h*,咱们可以更新方针文件或目录的符号链接的时刻戳,而不是方针自身。

5.3.避免文件创立

咱们可以运用*-c*禁用文件创立。运用此选项履行时,假如文件不存在,则该指令不履行任何操作:

<span style="color:#000000"><span style="background-color:#ffffff"><code class="language-bash"><span style="color:#888888"># ls -l sample-file.txt</span>
<span style="color:#397300">ls</span>: sample-file.txt: No such file or directory
<span style="color:#888888"># touch -c sample-file.txt</span>
<span style="color:#888888"># ls -l sample-file.txt</span>
<span style="color:#397300">ls</span>: sample-file.txt: No such file or directory</code>仿制</span></span>

Linux touch 命令指南大全

5.4.仅更新前次拜访时刻

假如咱们只想更新文件或目录的前次拜访时刻,咱们可以运用*-a*选项:

<span style="color:#000000"><span style="background-color:#ffffff"><code class="language-bash"><span style="color:#888888"># ls -l sample-file.txt</span>
-rw-r--r--  1 baeldung  baeldung  0 Jan 20 19:00 sample-file.txt
<span style="color:#888888"># ls -l -u sample-file.txt</span>
-rw-r--r--  1 baeldung  baeldung  0 Jan 20 19:00 sample-file.txt  
<span style="color:#888888"># touch -a sample-file.txt</span>
<span style="color:#888888"># ls -l sample-file.txt</span>
-rw-r--r--  1 baeldung  baeldung  0 Jan 20 19:00 sample-file.txt
<span style="color:#888888"># ls -l -u sample-file.txt</span>
-rw-r--r--  1 baeldung  baeldung  0 Feb  1 07:00 sample-file.txt
</code>仿制</span></span>

Linux touch 命令指南大全

如前所述,默许行为是更新前次拜访时刻和前次修正时刻。运用此选项会掩盖设置两个时刻戳的默许行为。一同运用 -a 和 -m 会导致更新两个时刻戳的默许行为。

5.5.仅更新前次修正时刻

同样,假如咱们只想更新文件或目录的最终修正时刻,咱们可以运用*-m*选项:

<span style="color:#000000"><span style="background-color:#ffffff"><code class="language-bash"><span style="color:#888888"># ls -l sample-file.txt</span>
-rw-r--r--  1 baeldung  baeldung  0 Jan 20 19:00 sample-file.txt
<span style="color:#888888"># ls -l -u sample-file.txt </span>
-rw-r--r--  1 baeldung  baeldung  0 Jan 20 19:00 sample-file.txt
<span style="color:#888888"># touch -m sample-file.txt</span>
<span style="color:#888888"># ls -l sample-file.txt</span>
-rw-r--r--  1 baeldung  baeldung  0 Feb  1 07:00 sample-file.txt
<span style="color:#888888"># ls -l -u sample-file.txt</span>
-rw-r--r--  1 baeldung  baeldung  0 Jan 20 19:00 sample-file.txt
</code>仿制</span></span>

Linux touch 命令指南大全

6. 兼容性

为了坚持与旧版 BSD 体系上接触的向后兼容性,仍然支撑一些过时的功用和选项。

它答应咱们首先以“ MMDDhhmm[YY]”格局指定时刻格局,后跟要在文件体系上更新的文件或目录的称号。

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

<span style="color:#000000"><span style="background-color:#ffffff"><code class="language-bash"><span style="color:#888888"># ls -l sample-file.txt</span>
-rw-r--r--  1 baeldung  baeldung  0 Feb 10 12:00 sample-file.txt
<span style="color:#888888"># touch 0123000020 sample-file.txt</span>
<span style="color:#888888"># ls -l sample-file.txt</span>
-rw-r--r--  1 baeldung  baeldung  0 Jan 23 00:00 sample-file.txt
</code>仿制</span></span>

Linux touch 命令指南大全

该指令曾经可以运用*-f*选项强制更新文件。然而,这个选项现在被忽略了。

七、结论

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

总归,当咱们不需要对文件进行任何更改,但咱们想要更新其前次拜访或前次修正时刻时,接触会很方便。