Linux中touch命令的9个有用示例
Linux中的touch命令
Linux中的touch命令用于更改文件时间戳,但是touch命令最常见的用法之一是创建一个新的空文件。
使用touch命令,我们可以在Linux中更改访问,修改和更改文件和文件夹的时间。
我们可以更新时间戳或者将其修改为过去的日期。
touch命令的语法非常简单:
touch [option] file
同样,Linux中的文件时间戳是什么?
在前面的文章中,我已经详细介绍了Linux中的时间戳。
我建议我们阅读该书,以便更好,更清楚地理解。
为了快速回顾起见,我将在此处列出时间戳记:
- 访问时间–上次访问文件的时间
- 修改时间–上次修改文件的时间
- 更改时间–上次更改文件元数据(文件许可权,所有权等)的时间
我们可以通过以下方式使用stat命令查看文件的时间戳:
stat abhi.txt File: abhi.txt Size: 10 Blocks: 8 IO Block: 4096 regular file Device: 10305h/66309d Inode: 11940163 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1000/igi) Gid: ( 1000/igi) Access: 2016-09-02 14:12:24.476483367 +0530 Modify: 2016-09-02 14:12:24.476483367 +0530 Change: 2016-09-02 14:12:24.476483367 +0530 Birth:
Stat命令甚至显示文件的索引节点号。
Linux中9个实用的touch命令示例
现在,通过一些简单但有用的示例,看看如何使用touch命令。
1.创建一个空文件
如前所述,这是touch命令最常见的用法。
我们所要做的就是在文件名中使用touch。
touch <filename>
如果该文件不存在,则会创建一个空文件。
touch empty_file ls -l empty_file -rw-r--r-- 1 igi igi 0 Sep 2 14:37 empty_file
但是,如果文件已经存在怎么办?
在这种情况下,它将把文件的所有三个时间戳更新为当前时间。
2.创建多个空文件
我们也可以使用touch创建多个空文件。
只需提供我们要创建的文件的名称即可。
touch <file1> <file2> <file3>
如果我们认为写所有文件名很麻烦,则可以通过以下方式自动生成文件名:
touch new-file-{1..10}.txt
这将创建new-file-1.txt,new-file-2.txt到new-file-10.txt。
3.避免通过触摸创建文件(如果不存在)
如果输入文件存在,Touch将更新其时间戳;如果输入文件不存在,Touch将创建一个空文件。
但是,如果我们不想触摸以创建一个新的空文件怎么办?
我们希望它更新文件的时间戳,但是如果文件不存在,则不应创建该文件。
在以下情况下,可以使用带-c选项的touch命令:
touch -c <filename>
切记:如果Touch不存在,它将创建一个新的空文件,否则它将修改现有文件的时间戳。
我们可以使用-c选项停止创建新文件。
4.更改文件的所有时间戳
如果我们在现有文件上使用touch,它将改变对该文件的访问,修改和时间。
例如,我有一个名为sherlock.txt的文件,带有以下时间戳:
stat sherlock.txt File: sherlock.txt Size: 356 Blocks: 8 IO Block: 4096 regular file Device: 10305h/66309d Inode: 11928277 Links: 1 Access: (0777/-rwxrwxrwx) Uid: ( 1000/igi) Gid: ( 1000/igi) Access: 2016-08-25 09:44:56.092937000 +0530 Modify: 2016-08-09 09:41:05.028309000 +0530 Change: 2016-08-25 09:44:56.096937182 +0530
如果我在此命令上使用touch,则所有时间戳都将更改为当前时间戳。
touch sherlock.txt stat sherlock.txt File: sherlock.txt Size: 356 Blocks: 8 IO Block: 4096 regular file Device: 10305h/66309d Inode: 11928277 Links: 1 Access: (0777/-rwxrwxrwx) Uid: ( 1000/igi) Gid: ( 1000/igi) Access: 2016-09-02 15:22:47.017037942 +0530 Modify: 2016-09-02 15:22:47.017037942 +0530 Change: 2016-09-02 15:22:47.017037942 +0530 Birth:
注意:我们不应该为ctime(更改时间)而烦恼。
这是系统属性,不能(不应该)由用户控制。
重点应该放在访问和修改时间上。
5.仅更新文件的访问时间
我们可能并不总是想要更改文件的所有时间戳。
如果只想更改文件的访问时间,则可以通过触摸使用-a选项。
touch -a sherlock.txt stat sherlock.txt File: sherlock.txt Size: 356 Blocks: 8 IO Block: 4096 regular file Device: 10305h/66309d Inode: 11928277 Links: 1 Access: (0777/-rwxrwxrwx) Uid: ( 1000/igi) Gid: ( 1000/igi) Access: 2016-09-02 15:29:08.796926093 +0530 Modify: 2016-09-02 15:22:47.017037942 +0530 Change: 2016-09-02 15:29:08.796926093 +0530 Birth:
6.仅更新文件的修改时间
如果仅要将文件的修改时间更新为当前时间戳,请使用touch命令的-m选项。
touch -m sherlock.txt stat sherlock.txt File: sherlock.txt Size: 356 Blocks: 8 IO Block: 4096 regular file Device: 10305h/66309d Inode: 11928277 Links: 1 Access: (0777/-rwxrwxrwx) Uid: ( 1000/igi) Gid: ( 1000/igi) Access: 2016-09-02 15:29:08.796926093 +0530 Modify: 2016-09-02 15:31:25.770866881 +0530 Change: 2016-09-02 15:31:25.770866881 +0530 Birth:
7.使用另一个文件的时间戳
我们还可以通过以下方式将另一个文件的时间戳与-r方法一起用作参考:
touch -r <source_file> <target_file>
这将设置目标文件的访问和修改时间与源文件的访问和修改时间相同。
8.设置特定的访问和修改时间
我们可能已经注意到,在几乎所有情况下(参考文件除外),时间戳都会更改为当前时间戳。
但是,我们并不受此约束。
触摸允许我们将访问和修改时间设置为过去或者将来的日期。
我们可以使用-t选项和以下格式的时间戳记:
[[CC] YY] MMDDhhmm [.ss]]
- CC-一年的前两位数字
- YY –一年的后两位数字
- MM –一年中的月份(01-12)
- DD –每月的某天(01-31)
- hh –一天中的小时(00-23)
- mm –小时(00-59)
- ss –秒(00-59)
在上述情况下,CC是可选的。
实际上,CCYY也是可选的,在这种情况下,它将需要当前年份。
同样,秒也是可选的,默认为00。
让我向我们展示一个示例,方法是将时间戳记更改为12021301,即当年的第12个月,第二天,第13小时和第一分钟:
touch -t 12021301 agatha.txt stat agatha.txt File: agatha.txt Size: 457 Blocks: 8 IO Block: 4096 regular file Device: 10305h/66309d Inode: 11928279 Links: 1 Access: (0777/-rwxrwxrwx) Uid: ( 1000/igi) Gid: ( 1000/igi) Access: 2016-12-02 13:01:00.000000000 +0530 Modify: 2016-12-02 13:01:00.000000000 +0530 Change: 2016-09-02 15:59:47.588680901 +0530 Birth:
如果我们尝试输入无效的日期,则会看到错误消息。
我们还会注意到,更改时间使用的是当前时间戳,与访问和修改不同。
这是因为它是系统属性。
9.更改符号链接的时间戳
我们也可以将touch命令与符号链接一起使用。
在处理符号链接时,只需使用-h选项。
其余部分与常规文件相同。
touch -h <symbolic_link>