5240945 发表于 2004-10-9 21:14:16

如何用touch命令修改文件change时间,懂的麻烦指点下

如何用touch命令修改文件change时间,懂的麻烦指点下。
最好有范例。谢谢啦。
比如要把,change:2004-10-09 20:20:20 000000000 +0800
改成:    change:2005-11-11 22:22:22 000000000 +0800
要如何运用touch?

MichaelBibby 发表于 2004-10-9 21:50:12


TOUCH

Section: 1Misc. Reference Manual Pages (1)

名字


touch - 修改文件的时间戳记.

总览


touch [-acm][-r ref_file(参照文件)|-t time(时间值)] file(文件名)... 被废弃的版本: touch [-acm][ugly_time] file(文件)... GNU版本: touch [-acfm] [-r file(参照文件)] [-t decimtime(时间值)] [-d time(时间值)] [--time={atime,access,use,mtime,modify}] [--date=time] [--reference=file] [--no-create] [--help] [--version] [--] file(文件)...

用法描述


touch 修改每个指定文件 file 的存取(access)和/或修改(modification)时间戳记. 除非使用-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标准所规定的格式并 不一样.

GNU版本通用选项


--help 使程序在标准输出上显示该程序的用法信息. --version 使程序在标准输出上打印其版本信息.

GNU版本通用选项


--help 使程序在标准输出上显示该程序的用法信息. --version 使程序在标准输出上打印其版本信息. -- 用于使程序终止对选项的解析.

运行环境


环境变量TZ一般用来表明所给时刻是哪个时区的.而环境变量LANG, LC_ALL, LC_CTYPE 和 LC_MESSAGES还是一般情况下的意义.

遵循


GNU版touch的-t选项的参数所用格式并不符合POSIX标准1003.2的描述.

用法实例


如果文件foo并不存在,那么命令`touch foo'将创建它,并把最 后的修改时间改到现在的时刻.这一特点经常用来引导 make 的执行.

注意


这篇说明描述了fileutils-4.0程序包中的 touch. 其它版本的touch可能与此有稍许不同. 对本文的修正和增补请致信[email protected]. 程序缺陷请向[email protected]报告

5240945 发表于 2004-10-9 22:10:21

还是看不懂要怎样修改“文件最后修改时间”

我能修改
文件建立时间
文件最后访问时间
可是还是看不懂要怎样修改“文件最后修改时间”
斑竹能给个范例我看看吗??

MichaelBibby 发表于 2004-10-9 22:59:34

你所指的“文件最后修改时间”是指????

抱歉 :oops:

dannycat 发表于 2004-10-9 23:14:03

5240945说的“文件最后修改时间”是指“change time”,其实是文件创建时间。
文件创建时间是不可能通过任何系统命令来修改的,除非你直接读写 inode 表。

或者,调整系统时间,重新创建文件 :wink:

5240945 发表于 2004-10-9 23:22:55

是我抱歉啦。。没说明白。。

我说的最后修改时间就是:
用stat命令可以看到文件下面有3个时间阿。。
access: 2004-10-10 20:20:20 000000000+0800
modify: 2004-10-10 20:20:20 000000000+0800
change:2004-10-10 20:20:20 000000000+0800

我用 { touch -d “22:22:22 2003-11-11” 文件名 }
命令成功修改了access和modify的时间和日期。
可是试了几个参数还是改不了change的时间和上面的2003-11-11 22:22:22
版主能给个命令范例来看看吗?
就比如touch -? ???。。。

5240945 发表于 2004-10-9 23:34:12

文件创建时间是不可能通过任何系统命令来修改的

5240945说的“文件最后修改时间”是指“change time”,其实是文件创建时间。
文件创建时间是不可能通过任何系统命令来修改的,除非你直接读写 inode 表。

:oops::oops::oops:
change时间好象不是不能改阿。只是改成了系统当前时间阿。。。

5240945 发表于 2004-10-10 20:57:23

自己顶。。。。。。。。。
有老鸟知道怎么改的话。麻烦指点下阿。。。
急!急!急!!

MichaelBibby 发表于 2004-10-10 21:42:31

俺还真不知道怎么修改了,抱歉 :oops:

dannycat 发表于 2004-10-11 07:27:55

Re: 文件创建时间是不可能通过任何系统命令来修改的

change时间好象不是不能改阿。只是改成了系统当前时间阿。。。
说对了! 要用LINUX的正常命令改 change time,只此一招!
前面就跟你说了,调整系统时间,重新创建文件:wink:
或者说改了时间以后再 touch 文件。
要不就去找个能直接读写 inode 表的工具吧,不过改坏了可别怪我 :twisted:
页: [1]
查看完整版本: 如何用touch命令修改文件change时间,懂的麻烦指点下