修改文件的时间戳
命令语法格式
touch [OPTION]… FILE…
命令描述
命令touch可以修改文件的访问时间(atime)和修改时间(mtime)。
除非指定了–no-create(-c)或–no-dereference(-h),否则如果FILE参数指定的文件不存在,则会创建一个名为FILE的空文件。
参数FILE如果是’-‘则会被专门处理,它会导致touch改变与标准输出关联的文件的时间。
默认情况下,touch将文件的时间戳设置为当前时间。由于touch从左到右对其操作数进行操作,因此位于前面的操作数的时间戳和位于后面的操作数的时间戳可能不一致。
将文件时间戳设置为当前时间时,touch可以更改不属于用户但具有写入权限的文件的时间戳。否则,这些文件必须属于这个用户。一些较旧的系统有进一步的限制:用户必须拥有这些文件,除非访问时间戳和修改时间戳都设置为当前时间。
touch命令不能将文件的状态更改时间戳(ctime)设置为用户指定的值,并且根本不能更改文件的创建时间(如果支持)。此外,touch也有与影响更新文件时间戳的所有程序类似的问题。例如,touch可能会将文件的时间戳设置为与请求的时间略有不同的值。请参阅文件时间戳。
时间戳采用TZ环境变量指定的时区规则,或者如果未设置TZ,则采用系统默认规则。请参阅GNU C库参考手册中的使用TZ指定时区。通过使用UTC时间戳,可以避免在夏令时转换期间产生歧义。
命令支持的选项及含义
需要提供给长选项的参数也必须提供给相应的短选项。
-c, –no-create
对于不存在的文件FILE,不要警告,也不要创建。
-h, –no-dereference
尝试更改符号链接的时间戳,而不是链接指向的内容。使用此选项时,不会创建空文件,但是会产生文件不存在的警告。与选项-c一起使用可以避免由于文件不存在而产生的警告。并非所有系统都支持更改符号链接的时间戳,因为直到POSIX 2008才要求操作的底层系统支持。另外,在某些系统上,仅检查符号链接的操作会更改访问时间戳,以致仅更改修改时间戳(mtime)将持续足够长的时间以便可观察。当与选项-r结合使用时,引用的时间戳将从符号链接中获取,而不是从其指向的文件中获取。
修改指定时间
-a, –time=atime, –time=access, –time=use
只更改访问时间(atime)。
-m, –time=mtime, –time=modify
只更改修改时间(mtime)。
指定具体时间
-d, –date=STRING
使用STRING指定的时间,而不是当前系统时间。它可以包含月份名称、时区、’am’、’pm’、’昨天’等。例如,–date=”2004-02-27 14:19:13.489392193 +0530″指定时间是在UTC时间之后5小时30分钟的时区中,在2004年2月27日下午2:19:13之后的489,392,193纳秒。
请参阅「日期输入格式」。对于不支持高精度时间戳的文件系统,该命令会默默忽略此处的任何超出的精度。
-t STAMP
使用[[CC]YY]MMDDhhmm[.ss]格式指定的时间,而不时系统默认时间。
-r, –reference=FILE
使用参考文件FILE的时间,而不是当前系统时间。如果此选项与–date=time (-d time)选项组合在一起,则参考文件的时间是给定时间的起点,而其他情况则会被忽略。例如,-r foo -d ‘-5 seconds’指定的时间戳为foo的相应时间戳之前的5秒钟。如果文件是符号链接,则参考时间戳取自符号链接指向的目标,除非-h也有效。
其他选项
-f
已经被忽略;用于与BSD版本的touch兼容。
–help
显示帮助信息并退出。
–version
显示版本信息并退出。
附加说明
在POSIX 1003.1-2001之前的系统上,touch支持过时的语法,如下所示。
如果没有给出任何-d,-r,-t选项的时间戳,并且如果有两个或多个文件,并且第一个文件的形式为’mmddhhmm[yy]’,那么它将被视为是一个有效的-t选项的参数(如果yy,如果有的话,被移动到前面),并且如果代表年份在1969-1999范围内,则该参数被解释为其他文件的时间,而不是文件名。
尽管可以使用_POSIX2_VERSION环境变量(参见标准一致性)来控制此过时行为,但可移植脚本应避使用该环境变量来控制其行为。例如,应该使用touch ./12312359 main.c或者touch -t 12312359 main.c,而不是模棱两可的touch 12312359 main.c。
退出状态
0 成功;
>0 失败;
相关手册
查看在线手册:http://www.gnu.org/software/coreutils/touch
查看info手册:info ‘(coreutils) touch invocation’
参考文献
- man 1 touch, version GNU coreutils 8.28
更新日志
- 06/25/2018 创建文章