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>
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>
假如创立新文件,则新创立文件的权限将默以为给定文件体系的规范权限。
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>
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>
当未指定CC和YY时,它们默以为当时年份:
<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>
假如未指定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>
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>
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>
运用*-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>
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>
如前所述,默许行为是更新前次拜访时刻和前次修正时刻。运用此选项会掩盖设置两个时刻戳的默许行为。一同运用 -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>
6. 兼容性
为了坚持与旧版 BSD 体系上接触的向后兼容性,仍然支撑一些过时的功用和选项。
它答应咱们首先以“ MMDDhhmm[YY]”格局指定时刻格局,后跟要在文件体系上更新的文件或目录的称号。
MM、DD、hh和mm字母对的处理方式与*-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>
该指令曾经可以运用*-f*选项强制更新文件。然而,这个选项现在被忽略了。
七、结论
在本文中,咱们探讨了touch指令行实用程序、其各种选项及其向后兼容性。
总归,当咱们不需要对文件进行任何更改,但咱们想要更新其前次拜访或前次修正时刻时,接触会很方便。