管理文件

用 touch 设置 mtime


[ian@echidna lpi103]$ touch -t 200511051510.59 f3
[ian@echidna lpi103]$ touch -d 11am f4
[ian@echidna lpi103]$ touch -d "last fortnight" f5
[ian@echidna lpi103]$ touch -d "yesterday 6am" f6
[ian@echidna lpi103]$ touch -d "2 days ago 12:00" f7
[ian@echidna lpi103]$ touch -d "tomorrow 02:00" f8
[ian@echidna lpi103]$ touch -d "5 Nov" f9
[ian@echidna lpi103]$ ls -lrt f*
-rw-rw-r-- 1 ian ian 0 Oct 24 12:32 f5
-rw-rw-r-- 1 ian ian 4 Nov 4 15:58 f1
-rw-rw-r-- 1 ian ian 0 Nov 4 16:12 f2
-rw-rw-r-- 1 ian ian 0 Nov 5 00:00 f9
-rw-rw-r-- 1 ian ian 0 Nov 5 12:00 f7
-rw-rw-r-- 1 ian ian 0 Nov 5 15:10 f3
-rw-rw-r-- 1 ian ian 0 Nov 6 06:00 f6
-rw-rw-r-- 1 ian ian 0 Nov 7 11:00 f4
-rw-rw-r-- 1 ian ian 0 Nov 8 2005 f8


来自参考文件的时间戳



[ian@echidna lpi103]$ date
Mon Nov 7 12:40:11 EST 2005
[ian@echidna lpi103]$ date -r f1
Fri Nov 4 15:58:27 EST 2005
[ian@echidna lpi103]$ touch -r f1 f1a
[ian@echidna lpi103]$ ls -l f1*
-rw-rw-r-- 1 ian ian 4 Nov 4 15:58 f1
-rw-rw-r-- 1 ian ian 0 Nov 4 15:58 f1a

按名称搜索文件(先在 lpi103 目录中搜索名称里有 ‘1’ 或 ‘k’ 的所有文件,然后执行一些路径搜索)



[ian@echidna lpi103]$ find . -name "*[1k]*"
./text1
./f1
./backup
./backup/text1.bkp.2
./backup/text1.bkp.1
./f1a
[ian@echidna lpi103]$ find . -ipath "*ACK*1"
./backup/text1.bkp.1
[ian@echidna lpi103]$ find . -ipath "*ACK*/*1"
./backup/text1.bkp.1
[

 


在上面的第一个示例中,找到了两个文件和一个目录(./backup)。使用 -type 参数加上一个字母的类型对搜索进行限制。‘f’ 表示常规文件,‘d’表示目录,‘l’ 表示符号链接。其他类型请参考 find 的手册页。清单显示搜索目录(-type d)的结果。


按类型搜索文件


[ian@echidna lpi103]$ find . -type d
.
./backup
[ian@echidna lpi103]$ find . -type d -name "*"
./backup


 

还可以按文件大小进行搜索,可以针对特定大小(n),也可以针对大于(+n)或小于(-n)给定值的文件。通过给出文件大小的上界和下界,可以搜索大小在给定范围内的文件。在默认情况下,find-size 选项假设单位是 ‘b’,即 512 字节的块。指定 ‘c’ 表示字节,‘k’ 表示 kb。在清单中,先搜索大小为 0 的所有文件,然后搜索大小为 24 或 25 字节的所有文件。注意,指定 -empty 而不是 -size 0 也可以搜索空文件。


 按大小搜索文件


[ian@echidna lpi103]$ find . -size 0
./f2
./f3
./f4
./f5
./f6
./f7
./f8
./f9
./f1a
[ian@echidna lpi103]$ find . -size -26c -size +23c -print
./text1
./text2
./text5
./backup/text1.bkp.2
./backup/text1.bkp.1

引入了 -print 选项,这是在搜索返回的结果上执行动作 的例子。在 bash shell 中,如果没有指定动作,这就是默认动作。在某些系统上和某些 shell 上,要求指定动作,否则就没有输出。

其他动作包括 -ls(打印文件信息,相当于 ls -lids 命令)或 -exec(对每个文件执行一个命令)。-exec 必须用一个分号终止,这个分号必须进行转义,以避免 shell 解释它。

 

如果在命令中要使用返回的文件,就指定 {}。正如前面所说的,花括号对于 shell 也有特殊意义,所以需要转义或加上引号。清单显示如何使用 -ls-exec 选项列出文件信息。


清单 搜索文件并在结果上操作


[ian@echidna lpi103]$ find . -size -26c -size +23c -ls
2128984 4 -rw-rw-r-- 1 ian ian 24 Sep 23 12:27 ./text1
2128985 4 -rw-rw-r-- 1 ian ian 25 Sep 23 13:39 ./text2
2128982 4 -rw-rw-r-- 1 ian ian 24 Sep 26 12:46 ./text5
1564497 4 -rw-rw-r-- 1 ian ian 24 Oct 4 09:45 ./backup/text1.bkp.2
2129019 4 -rw-rw-r-- 1 ian ian 24 Oct 4 09:43 ./backup/text1.bkp.1
[ian@echidna lpi103]$ find . -size -26c -size +23c -exec ls -l '{}' \;
-rw-rw-r-- 1 ian ian 24 Sep 23 12:27 ./text1
-rw-rw-r-- 1 ian ian 25 Sep 23 13:39 ./text2
-rw-rw-r-- 1 ian ian 24 Sep 26 12:46 ./text5
-rw-rw-r-- 1 ian ian 24 Oct 4 09:45 ./backup/text1.bkp.2
-rw-rw-r-- 1 ian ian 24 Oct 4 09:43 ./backup/text1.bkp.1

 

 

 

-exec 选项可以用于您能够想像得到的任何用途。例如:

find . -empty -exec rm '{}' ";

删除目录树中的所有空文件,

find . -name "*.htm" -exec mv '{}' '{}l' ";

将所有 .htm 文件重命名为 .html 文件。

 

 

 

 

posted @ 2008-08-18 17:30  xiaoyixy  阅读(193)  评论(0编辑  收藏  举报