在Linux中,每个文件都关联一个时间戳,并且每个文件都会存储最近一次访问的时间、最近一次修改的时间和最近一次变更的时间等信息。所以,无论何时我们创建一个新文件,访问或修改一个已存在的文件,文件的时间戳都会自动地更新。
touch - 修改文件的时间戳记. touch命令就可用于创建、变更和修改文件的时间戳。
总览
touch
[-acm][-r ref_
file
(参照文件)|-t
time
(时间值)] file(文件名)...
GNU版本:
touch
[-acfm] [-r file(参照文件)] [-t decimtime(时间值)] [-d time(时间值)] [--time={atime,access,use,mtime,modify}] [--
date
=time] [--refere
nc
e=file] [--no-create] [--help] [--version] [--] file(文件)...
用法描述
touch 修改每个指定文件 file 的存取(access)和/或修改(modifi
cat
ion)时间戳记.除非使用-r或-t选项,这些时间戳记都将修改为当前的时间.使用-r选项时,这些戳记将按照文件 ref_file 的时间戳记来修改(即变得和ref_file时间戳记值相同).使用-t选项,则这些戳记将按照给定的时间值 time 进行修改.同时使用或同时不使用选项-a和-m,存取和修改两个戳记都将被更改.若只使用选项-a,则只修改存取戳记.同样,只使用选项-m,则只修改修改戳记.若要修改戳记的文件尚不存在,除非使用-c选项,touch 将创建它(作为空文件,并赋予0666的模式且受
umask
值的限制).
POSIX标准定义的选项
-a
修改文件 file 的存取时间.只改变访问时间。
-c 不创建文件 file.
-m 修改文件 file file 只改变修改时间。
-r ref_file 将参照文件 ref_file 相应的时间戳记的数值作为指定文件 file 时间戳记的新值.
-t time
使用指定的时间值 time 作为指定文件 file 相应时间戳记的新值.此处的 time 规定为如下形式 的十进制数∶
[[CC]YY]MMDDhhmm[.SS]
这里,CC为年数中的前两位,即”世纪数”;YY为年数的后两位,即某世纪中的年数.如果不给出CC的值,则touch 将把年数CCYY限定在1969--2068之内.MM为月数,DD为天将把年数CCYY限定在1969--2068之内.MM为月数,DD为天数,hh为小时数(几点),mm为分钟数,SS为秒数.此处秒的设定范围是0--61,这样可以处理闰秒.这些数字组成的时间是环境变量TZ指定的时区中的一个时间.由于系统的限制,早于1970年1月1日的时间是错误的.
POSIX标准的细节
已被废弃的
touch
版本使用时会出现模棱两可的情况: ugly_time 到底是时间值还是文件名?由于此种版本尚未提供-r或-t选项,所以使用时至少要有两个
命令
行参数,作为时间值, ugly_time 必须为第一个参数.这里的 ugly_time 是一个形为MMDDhhmm[yy]的八位或十位整数.其中,yy是介于69--99之间表示1969--1999之间某一年的两位数,如果不给,表示当前这一年.
GNU版本的细节
如果第一个指定文件 file 的名子从形式上说是选项 -t 的有效参数,并且没有给出选项 -d, -r 或 -t -t
数,也没有给`--'选项,那么这个文件名将被解释成时间值.
一般情况下,利用
touch
修改文件的时间戳记时要求用户时该文件的所有者.除非只是把文件的存取和修改两种时间戳记修改为当前的时刻,这种情况只要求用户拥有对该文件`写'的权利就行了.
GNU版本选项用法简介
-a, --time=atime, --time=access, --time=use
只修改存取时间.
-c, --no-create
如果要修改的文件不存在,此选项使touch不去创建它.
-d, --date=time
使用时间值 time 代替指定文件的戳记值.可以包含月份名,时区名以及`am'和 `pm'等
-f
此选项用于兼容BSD版本的 touch(1).
-m, --time=mtime, --time=modify
只修改
修改时间
.
-r file, --reference=file
使用参照文件 file 的时间戳记值修改指定文件的时间戳记.
-t decimtime
这里时间值 decimtime 的格式为MMDDhhmm[[CC]YY][.ss] 从左至右分别是月份,日期,小时,分钟,可选的世纪和年,以及可选的秒. touch 将用这组数值修改指定文件的时间戳记.请注意,这个格式与POSIX标准所规定的格式并不一样.
- $ touch effyl
使用touch命令,你同样可以创建多个文件。例如,如下命令将创建名称分别为sheffyl、myeffyl和lueffyl的三个文件:
- $ touch sheffyl myeffyl lueffyl
使用-a选项,可以改变或更新文件的最新访问时间。如下命令更新文件的访问时间,如果文件effyl不存在,它将创建一个以effyl命名的新的空文件:
- $ touch -a effyl
使用-c选项,可以避免创建一个新文件,并用当前时间更新文件的时间戳:
- $ touch -c effyl
使用-m选项,可以只改变文件的修改时间,而访问时间不变:
- $ touch -m effyl
你可以同时使用-c和-t选项,来明确设置文件的时间,命令格式如下所示:
- $ touch -c -t YYMMDDHHMM filename
例如,我们将文件effyl的修改时间和访问时间设置为12年12月13日10点30分:
- $ touch -c -t 1212131030 effyl
如果想使用文件myeffyl的时间戳更新文件effyl的时间戳,那么可以使用-r选项:
- $ touch -r myeffyl effyl