Imported upstream version 1.5
[manpages-zh.git] / src / man1 / find.1
blobb4ab53ccb47e4791636046d5f8e91798b45e7743
1 .TH FIND 1L \" -*- nroff -*-
2 .SH NAME
3 find \- 递归地在层次目录中处理文件
4 .SH 总览 SYNOPSIS
5 .B find
6 [path...] [expression]
7 .SH 描述 DESCRIPTION
8 这个文档是GNU版本
9 .BR find
10 命令的使用手册。
11 .B find
12 搜索目录树上的每一个文件名,它从左至右运算给定的表达式,按照优先规则(见运算符OPERATORS一节)进行匹配,直到得出结果(左边运算在 '与' 操作中得出假,在'或' 操作中得出真),然后
13 .B find
14 移向下一个文件名。
15 .PP 
16 第一个以 '\-' , '(' , ')' , ',' 或 '!' 这些字符起始的参数是表达式的开始; 在它之前的任何参数是要搜索的路径,在它之后的任何参数都是表达式的余下部分。如果没有路径参数,缺省用当前目录。如果没有表达式,缺省表达式用 '\-print'.
17 .PP
18 当所有文件都成功处理时
19 .B find
20 退出并返回状态值0。如果发生错误则返回一个大于0的值。
21 .SH 表达式 EXPRESSIONS
23 表达式是由\fB选项\fR(选项总是影响所有的操作, 而不仅仅是一个指定的文件的处理, 而且总是返回真值),\fB测试\fR(测试返回一个真值或一个假值),还有\fB动作\fR(动作有side effects, 返回一个真值或假值) 组成。它们都以运算符分开.忽略运算符的时候,默认使用 \-and 连接. 如果表达式没有包含 \-prune 以外的动作,当表达式为真时会执行 \-print 动作。
24 .SS 选项 OPTIONS
26 所有的选项都总是返回真值,它们总会被执行,除非放在表达式中执行不到的地方。因此,清楚起见,最好把它们放在表达式的开头部分。
27 .IP \-daystart
28 从当日起始时开始而不是从24小时之前,计算时间(for \-amin, \-atime, \-cmin, \-ctime, \-mmin, and \-mtime)。
29 .IP \-depth
30 先处理目录的内容再处理目录本身。
31 .IP \-follow
32 不检索符号链接。隐含了 \-noleaf。
33 .IP "\-help, \-\-help"
34 列出
35 .B find
36 的命令行用法的概要,然后退出。
37 .IP "\-maxdepth \fIlevels\fR"
38 进入命令行参数指定的目录下层目录时,最深不超过\fIlevels\fR(一个非负整数)层。`\-maxdepth 0' 意味着只在命令行参数指定的目录中执行测试和动作。
39 .IP "\-mindepth \fIlevels\fR"
40 不在\fIlevels\fR(一个非负整数)层之内执行任何测试和动作。`\-mindepth 1'意味着处理所有的文件,除了命令行参数指定的目录中的文件。
41 .IP \-mount
42 不进入处于其它文件系统之上的目录。可以用\-xdev代替,从而和一些其他版本的
43 .BR find
44 兼容。
45 .IP "\-noleaf"
46 不为“目录中子目录数量比硬连接数少2”这种假设做优化。这个选项在搜索那些不遵循UNIX文件系统链接约定的文件系统时用,比如CD-ROM,MS-DOS文件系统或AFS卷的加载点。在普通的UNIX文件系统中,每个目录至少有两个硬连接,它的名字和它的 '.' 条目。另外,它的子目录(假如有)还会各有一个 '..' 链接到它。在
47 .B find
48 检索一个目录时,发现子目录数比它的连接数少二时,它就知道目录中的其他条目并非目录(而是目录树中的叶(`leaf')节点)。除非需要检索的是这个叶节点,否则没必要去处理它。这样可以带来很大的搜索速度提升。
49 .IP "\-version, \-\-version"
50 打印\fBfind\fR的版本号然后退出。
51 .IP \-xdev
52 不进入处于其他文件系统之上的目录。
53 .SS 测试 TESTS
55 数字参数可以这样给出:
56 .IP \fI+n\fP
57 是比
58 .IR n
59 大,
60 .IP \fI\-n\fP
61 是比
62 .IR n
63 小,
64 .IP \fIn\fP
65 正好是
66 .IR n
67
68 .IP "\-amin \fIn\fR"
69 对文件的最近一次访问是在 \fIn\fR 分钟之前。
70 .IP "\-anewer \fIfile\fR"
71 对文件的最近一次访问比 \fIfile\fR 修改时间要晚。如果命令行中 \-follow 在 \-anewer 之前,(也只有在这种情况下) \-anewer 会受 \-follow 的影响。
72 .IP "\-atime \fIn\fR"
73 对文件的最近一次访问是在 \fIn\fR*24 小时之前。
74 .IP "\-cmin \fIn\fR"
75 对文件状态的最近一次修改是在 \fIn\fR 分钟之前。
76 .IP "\-cnewer \fIfile\fR"
77 对文件状态的最近一次修改比 \fIfile\fR 修改时间要晚。如果命令行中 \-follow 在 \-cnewer 之前,(也只有在这种情况下) \-cnewer 会受 \-follow 的影响。
78 .IP "\-ctime \fIn\fR"
79 对文件状态的最近一次修改是在 \fIn\fR*24 小时之前。
80 .IP \-empty
81 文件是空的普通文件或者空目录。
82 .IP \-false
83 总是false。
84 .IP "\-fstype \fItype\fR"
85 文件处于 \fItype\fR 类型的文件系统之上。有效的文件系统类型在不同版本的Unix中是不同的;一些Unix中的不完全的文件系统类型列表是这样:ufs, 4.2, 4.3, nfs, tmp, mfs, S51K, S52K. 你可以用 \-printf 加上 %F 指令来查看你的文件系统的类型。
86 .IP "\-gid \fIn\fR"
87 文件的数字形式的组ID是 \fIn\fR。
88 .IP "\-group \fIgname\fR"
89 文件属于 \fIgname\fR (也允许使用数字形式的组ID).
90 .IP "\-ilname \fIpattern\fR"
91 和 \-lname 类似,但是匹配时是不区分大小写的。
92 .IP "\-iname \fIpattern\fR"
93 和 \-name 类似,但是匹配时是不区分大小写的。例如,`fo*' and `F??' 模式与文件名 `Foo', `FOO', `foo', `fOo' 等等相匹配。
94 .IP "\-inum \fIn\fR"
95 文件的 i 结点数是 \fIn\fR。
96 .IP "\-ipath \fIpattern\fR"
97 和 \-path 类似,但是匹配时是不区分大小写的。
98 .IP "\-iregex \fIpattern\fR"
99 和 \-regex 类似, 但是匹配时是不区分大小写的。
100 .IP "\-links \fIn\fR"
101 文件有 \fIn\fR 个链接。
102 .IP "\-lname \fIpattern\fR"
103 文件是一个与\fIpattern\fR 匹配的符号链接。元字符不会对`/' 或 `.' 做特殊处理。
104 .IP "\-mmin \fIn\fR"
105 对文件数据的最近一次修改是在 \fIn\fR 分钟之前。
106 .IP "\-mtime \fIn\fR"
107 对文件数据的最近一次修改是在 \fIn\fR*24 小时之前。
108 .IP "\-name \fIpattern\fR"
109 基本的文件名(将路径去掉了前面的目录)与shell模式\fIpattern\fR相匹配。元字符(`*', `?', 还有`[]' ) 不会匹配文件名开头的`.' 。使用 \-prune 来略过一个目录及其中的文件。查看 \-path 的描述中的范例。
110 .IP "\-newer \fIfile\fR"
111 对文件的最近一次修改比 \fIfile\fR 修改时间要晚。如果命令行中 \-follow 在 \-newer 之前,(也只有在这种情况下) \-newer 会受 \-follow 的影响。
112 .IP \-nouser
113 没有符合文件的数字形式的用户ID的用户。
114 .IP \-nogroup
115 没有符合文件的数字形式的组ID的组。
116 .IP "\-path \fIpattern\fR"
117 文件名与shell模式\fIpattern\fR相匹配。元字符不会对`/' 或 `.' 做特殊处理。因此,例如:
119 .in +1i
120 find . \-path './sr*sc'
122 .in -1i
123 如果存在 './src/misc' 的话,会将它打印出来。想要忽略一个完整的目录树,应当使用\-prune 而不是检查目录树中所有的文件。例如:要跳过 'src/emacs' 目录和其中所有的文件和子目录,把其他找到的文件打印出来,应当这样:
125 .in +1i
126 find . \-path './src/emacs' -prune -o -print
128 .in -1i
129 .IP "\-perm \fImode\fR"
130 文件的权限位恰好是 \fImode\fR (八进制或符号)。
131 Symbolic modes use mode 0 as a point of departure.
132 .IP "\-perm \-\fImode\fR"
133 所有的权限位 \fImode\fR 都被设置了的文件。
134 .IP "\-perm +\fImode\fR"
135 任何权限位 \fImode\fR 被设置了的文件。
136 .IP "\-regex \fIpattern\fR"
137 文件名与正则表达式 \fIpattern\fR 匹配。这是对整个路径的匹配,不是搜索文件。例如,要匹配名为`./fubar3' 的文件,可以使用正则表达式 `.*bar.' 或者 `.*b.*3',但是不能用`b.*r3'。
138 .IP "\-size \fIn\fR[bckw]"
139 文件使用了 \fIn\fP 单位个存储单元。默认的单位是512字节的块,也可以用\fIn\fP后面加上 `b' 来指定这个值。其他的单位是字节,如果在 \fIn\fP 后面加上 `c' ;千字节(kB),如果在 \fIn\fP 后面加上`k' ;两字节的字,如果在 \fIn\fP 后面加上 `w' 。大小不会计入 indirect blocks,但是会计入没有真正分配空间的疏松文件中的块。
140 .IP \-true
141 总是true。
142 .IP "\-type \fIc\fR"
143 文件是 \fIc\fR 类型的。类型可取值如下:
145 .IP b
146 特殊块文件(缓冲的)
147 .IP c
148 特殊字符文件(不缓冲)
149 .IP d
150 目录
151 .IP p
152 命名管道 (FIFO)
153 .IP f
154 普通文件
155 .IP l
156 符号链接
157 .IP s
158 套接字
159 .IP D
160 门 (Solaris 特有)
162 .IP "\-uid \fIn\fR"
163 文件的数字形式的用户ID是 \fIn\fR 。
164 .IP "\-used \fIn\fR"
165 文件最后一次存取是在最后一次修改它的状态的 \fIn\fR 天之后。
166 .IP "\-user \fIuname\fR"
167 文件的所有者是 \fIuname\fR (也可以使用数字形式的用户ID).
168 .IP "\-xtype \fIc\fR"
169 和 \-type 相同,除非文件是一个符号链接。对于符号链接:如果没有给出 \-follow ,如果文件是一个指向 \fIc\fR 类型文件的链接,那么返回true;如果给出了 \-follow ,如果 \fIc\fR 是 `l' 那么返回true。换句话说,对于符号链接,\-xtype 检查那些 \-type 不检查的文件。
170 .SS 动作 ACTIONS
171 .IP "\-exec \fIcommand\fR ;"
172 执行 \fIcommand\fR;如果命令返回状态值0,那么 exec 返回true。所有
173 .B find
174 其余的命令行参数将作为提供给命令的参数,直到遇到一个由 `;' 组成的参数为止。命令的参数中,字符串 `{}' 将以正在处理的文件名替换。所有的 `{}' 都会被替换,不仅是在单独的一个参数中。有些版本的
175 .BR find 
176 不是这样做的。
177 这些参数可能需要用 `\e' 来escape 或者用括号括住,防止它们被shell展开。命令是从起始目录执行的。
178 .IP "\-fls \fIfile\fR"
179 返回true;类似 \-ls 但是像 \-fprint 那样写入 \fIfile\fR。
180 .IP "\-fprint \fIfile\fR"
181 返回true;将文件全名打印到文件 \fIfile\fR 中。如果运行 \fBfind\fR 时 \fIfile\fR 不存在,那么它将被创建。如果它存在,它将被覆盖。文件名``/dev/stdout'' 和``/dev/stderr'' 会作特殊处理;它们分别指的是标准输出和标准错误输出。
182 .IP "\-fprint0 \fIfile\fR"
183 返回true;类似 \-print0 但是像 \-fprint 那样写入 \fIfile\fR。
184 .IP "\-fprintf \fIfile\fR \fIformat\fR"
185 返回true;类似 \-printf 但是像 \-fprint 那样写入 \fIfile\fR。
186 .IP "\-ok \fIcommand\fR ;"
187 类似 \-exec 但是会先向用户询问 (在标准输入); 如果回应不是以 `y' 或 `Y' 起始则不会运行 \fIcommand\fR 而是返回false。
188 .IP \-print
189 返回true;在标准输出打印文件全名,然后是一个换行符。
190 .IP \-print0
191 返回true;在标准输出打印文件全名,然后是一个null字符。这样可以使得处理 \fBfind\fR 的输出的程序可以正确地理解带有换行符的文件名。
192 .IP "\-printf \fIformat\fR"
193 返回true;在标准输出打印 \fIformat\fR , 解释 `\e' escape 还有 `%' 指令。字段宽度和精度可以像C函数 `printf' 那样来指定。与 \-print 不同的是, \-printf 在字符串末端不会添加一个新行。可用的escape 和指令如下:
195 .IP \ea
196 警告铃声
197 .IP \eb
198 回退
199 .IP \ec
200 立即停止以当前格式输出,刷新输出设备。
201 .IP \ef
202 表格结束
203 .IP \en
204 新行
205 .IP \er
206 回车
207 .IP \et
208 水平tab
209 .IP \ev
210 竖直tab
211 .IP \e\e
212 输出自身`\e'
213 .IP \eNNN
214 ASCII编码是NNN(八进制)的字符
216 在一个 `\e' 字符后面使用任何其他字符会被作为普通的字符,因此它们都会被打印出来。
217 .IP %%
218 输出自身`%'
219 .IP %a
220 文件最后一次存取的时间。格式是C函数 `ctime' 返回值的格式。
221 .IP %A\fIk\fP
222 文件最后一次存取的时间。格式以 \fIk\fR 指定,可以是 `@' 或者是C函数 `strftime' 的指令格式。下面列出了 \fIk\fR 可用的值;有一些并不是在所有系统上都可用,因为不同系统中 `strftime' 也不同。
224 .IP @
225 从 Jan. 1, 1970, 00:00 GMT 起的秒数
227 时间字段:
228 .IP H
229 小时 (00..23)
230 .IP I
231 小时 (01..12)
232 .IP k
233 小时 ( 0..23)
234 .IP l
235 小时 ( 1..12)
236 .IP M
237 分钟 (00..59)
238 .IP p
239 本地的 AM 或者 PM
240 .IP r
241 12小时格式的时间 (hh:mm:ss [AP]M)
242 .IP S
243 秒 (00..61)
244 .IP T
245 24小时格式的时间 (hh:mm:ss)
246 .IP X
247 本地的时间表示方法 (H:M:S)
248 .IP Z
249 时区(例如,EDT),如果不能决定时区就是空
251 日期字段:
252 .IP a
253 本地一星期中每天的名称的缩写(Sun..Sat)
254 .IP A
255 本地一星期中每天的全名,可变长度 (Sunday..Saturday)
256 .IP b
257 本地每月的名称的缩写 (Jan..Dec)
258 .IP B
259 本地每月的全名,可变长度 (January..December)
260 .IP c
261 本地的日期和时间表示 (Sat Nov 04 12:02:33 EST 1989)
262 .IP d
263 一个月当中的日子 (01..31)
264 .IP D
265 日期 (mm/dd/yy)
266 .IP h
267 与 b 相同
268 .IP j
269 一年当中的日子 (001..366)
270 .IP m
271 月份 (01..12)
272 .IP U
273 以星期日作为每周起始,一年当中的星期 (00..53)
274 .IP w
275 一星期当中的日子 (0..6)
276 .IP W
277 以星期一当作每周起始,一年当中的星期 (00..53)
278 .IP x
279 本地的日期表示 (mm/dd/yy)
280 .IP y
281 年份的最后两位 (00..99)
282 .IP Y
283 年份 (1970...)
285 .IP %b
286 文件大小,以512字节的块为单位 (四舍五入)。
287 .IP %c
288 文件状态最后一次修改的时间。格式是C函数 `ctime' 返回值的格式。
289 .IP %C\fIk\fP
290 文件状态最后一次修改的时间。格式以 \fIk\fR 指定,类似于%A。
291 .IP %d
292 文件在目录树中的深度;0 意味着文件是一个命令行参数。
293 .IP %f
294 去掉了前面的目录的文件名 (只剩下最后的成分)。
295 .IP %F
296 文件所在文件系统的类型;这个值可以为 \-fstype 所用。
297 .IP %g
298 文件的组名,如果组没有名称就是数字形式的组ID。
299 .IP %G
300 文件的数字形式的组ID。
301 .IP %h
302 文件名的前面的目录部分 (仅除去最后的成分)。
303 .IP %H
304 据以找到了文件的命令行参数。
305 .IP %i
306 文件的 i 结点号(16进制)。
307 .IP %k
308 文件大小,以1kB 的块为单位 (四舍五入)。
309 .IP %l
310 符号链接的目标 (如果文件不是一个符号链接,那么结果是空字符串)。
311 .IP %m
312 文件的权限位 (8进制)。
313 .IP %n
314 文件的硬连接数。
315 .IP %p
316 文件名。
317 .IP %P
318 文件名,去掉了据以找到了文件的命令行参数的名称部分。
319 .IP %s
320 文件大小,以字节为单位。
321 .IP %t
322 文件最后一次修改的时间。格式是C函数 `ctime' 返回值的格式。
323 .IP %T\fIk\fP
324 文件最后一次修改的时间。格式以 \fIk\fR 指定,类似于%A。
325 .IP %u
326 文件的用户名,如果用户没有名称就是数字形式的用户ID。
327 .IP %U
328 文件的数字形式的用户ID。
330 在一个 `%' 字符后面使用任何其他字符,`%' 将被忽略 (但是其他字符会被打印出来)。
332 .IP \-prune
333 如果没有给出 \-depth 则返回 true; 不进入当前目录。
335 如果给出了 \-depth 则返回false; 没有效果。
336 .IP \-ls
337 返回true;以 `ls \-dils' 格式在标准输出列出文件。块以1kB 字节为单位计数,除非设置了环境变量POSIXLY_CORRECT,那样的话会使用 512字节的块。
338 .SS 运算符 OPERATORS
340 以优先级高低顺序排列:
341 .IP "( \fIexpr\fR )"
342 强制为优先
343 .IP "! \fIexpr\fR"
344 如果 \fIexpr\fR 是false则返回true
345 .IP "\-not \fIexpr\fR"
346 与 ! \fIexpr\fR 相同
347 .IP "\fIexpr1 expr2\fR"
348 与 (隐含的默认运算符);如果 \fIexpr1\fR 为false则不会执行 \fIexpr2\fR
349 .IP "\fIexpr1\fR \-a \fIexpr2\fR"
350 与 \fIexpr1 expr2\fR 相同
351 .IP "\fIexpr1\fR \-and \fIexpr2\fR"
352 与 \fIexpr1 expr2\fR 相同
353 .IP "\fIexpr1\fR \-o \fIexpr2\fR"
354 或;如果 \fIexpr1\fR 为true 则不会执行 \fIexpr2\fR
355 .IP "\fIexpr1\fR \-or \fIexpr2\fR"
356 与 \fIexpr1\fR \-o \fIexpr2\fR 相同
357 .IP "\fIexpr1\fR , \fIexpr2\fR"
358 列表;\fIexpr1\fR 和 \fIexpr2\fR 都会被执行。\fIexpr1\fR 的值被忽略,列表的值是 \fIexpr2\fR的值
359 .SH "参见 SEE ALSO"
360 \fBlocate\fP(1L), \fBlocatedb\fP(5L), \fBupdatedb\fP(1L), \fBxargs\fP(1L)
361 \fBFinding Files\fP (Info 在线帮助, 或者是打印的版本)
363 .SH "[中文版维护人]"
364 .B 袁乙钧 <bbbush@163.com>
365 .SH "[中文版最新更新]"
366 .B 11/01/2003
367 .SH "《中国linux论坛man手册页翻译计划》:"
368 .BI http://cmpp.linuxforum.net