用 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 文件。