2009-03-15

用touch修改文件的时间戳

在Linux中,与文件相关的时间有三个:访问时间(access time), 文件状态修改时间(change time),文件内容修改时间(modify time). 在Linux中,是没有保存文件的最初创建时间的.

访问时间: 文件每次访问之后,文件的访问都会被更新.例如用cat,less等来查看文件,文件的访问时间就会更新.如果文件创建后没有被访问过,则访问时间等于创建时间.ls,stat等命令都不会修改这个时间

文件状态修改时间: 文件的状态每次修改之后,文件的状态修改时间会被更新.例如,用chomd修改文件的权限,用mv重命名文件都会修改这个时间.如果文件创建后,状态都没有改变过,则状态改变时间等于创建时间.

文件内容修改时间: 文件每次修改之后,文件的内容修改时间会被更新.例如,用vim修改文件并保存后,这个时间就会更新(用vim修改文件保存文件后,三个时间都会被更新.用touch可以只修改内容修改时间,而不修改其他两个时间).ls -l 列出的时间就是这个时间. 如果文件创建后没有被修改过,则文件内容修改时间等于创建时间.

用stat可以查看文件的这三个时间
$ stat kk
File: `kk'
Size: 12 Blocks: 1 IO Block: 65536 regular file
Device: 88337c02h/2285075458d Inode: 4785074604130337 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 500/Administrator) Gid: ( 513/ None)
Access: 2009-03-15 12:10:32.593750000 +0800
Modify: 2009-03-15 12:10:32.593750000 +0800
Change: 2009-03-15 12:10:32.593750000 +0800


touch可用于修改文件的访问时间和内容修改时间.下面是它的一些选项

-a 只修改文件的访问时间.不加任何选项的话,touch会同时修改文件的访问时间和内容修改时间为当前时间
$ stat kk
File: `kk'
Size: 12 Blocks: 1 IO Block: 65536 regular file
Device: 88337c02h/2285075458d Inode: 4785074604130337 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 500/Administrator) Gid: ( 513/ None)
Access: 2009-03-15 12:19:42.579125000 +0800
Modify: 2009-03-15 12:19:42.579125000 +0800
Change: 2009-03-15 12:19:42.609375000 +0800

$ touch kk

$ stat kk
File: `kk'
Size: 12 Blocks: 1 IO Block: 65536 regular file
Device: 88337c02h/2285075458d Inode: 4785074604130337 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 500/Administrator) Gid: ( 513/ None)
Access: 2009-03-15 12:25:30.906250000 +0800
Modify: 2009-03-15 12:25:30.906250000 +0800
Change: 2009-03-15 12:25:30.937500000 +0800

$ touch -a kk

$ stat kk
File: `kk'
Size: 12 Blocks: 1 IO Block: 65536 regular file
Device: 88337c02h/2285075458d Inode: 4785074604130337 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 500/Administrator) Gid: ( 513/ None)
Access: 2009-03-15 12:25:43.236375000 +0800
Modify: 2009-03-15 12:25:30.906250000 +0800
Change: 2009-03-15 12:25:43.250000000 +0800

上例中,因为touch修改了文件的时间戳,所以文件的状态修改时间也更新了,但是这不是touch主动去更改的.

-c 如果传给touch的文件不存在,touch就会创建一个新的空文件.这个选项告诉touch不要创建空文件.
$ ls touch.*
ls: cannot access touch.*: No such file or directory

$ touch touch.1

$ ls touch.*
touch.1

$ touch -c touch.2

$ ls touch.*
touch.1


-m 与-a对应,-a只修改访问时间,-m则只修改内容修改时间

-r file 把文件的时间戳修改成和file的一样
$ stat sed.test
File: `sed.test'
Size: 6 Blocks: 1 IO Block: 65536 regular file
Device: 88337c02h/2285075458d Inode: 24769797950545978 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 500/Administrator) Gid: ( 513/ None)
Access: 2009-03-15 11:43:20.927875000 +0800
Modify: 2008-08-08 08:08:00.000000000 +0800
Change: 2009-03-15 11:49:24.781250000 +0800

$ touch -r sed.test kk

$ stat kk
File: `kk'
Size: 12 Blocks: 1 IO Block: 65536 regular file
Device: 88337c02h/2285075458d Inode: 4785074604130337 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 500/Administrator) Gid: ( 513/ None)
Access: 2009-03-15 11:43:20.927875000 +0800
Modify: 2008-08-08 08:08:00.000000000 +0800
Change: 2009-03-15 12:30:34.078125000 +0800


-t [[CC]YY]MMhhmm.[ss] 将时间戳修改为指定的时间,而不是当前时间
$ touch -t 0001020304.45 kk

$ stat kk
File: `kk'
Size: 12 Blocks: 1 IO Block: 65536 regular file
Device: 88337c02h/2285075458d Inode: 4785074604130337 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 500/Administrator) Gid: ( 513/ None)
Access: 2000-01-02 03:04:45.000000000 +0800
Modify: 2000-01-02 03:04:45.000000000 +0800
Change: 2009-03-15 12:33:21.984375000 +0800



转载请注明出处 http://fornote.blogspot.com

没有评论:

发表评论