10.1.5. 查找文件的语法
find(1) 被用作从归档中筛选文件也被用作拷贝命令 (参见第 10.1.3 节 “归档语法”和第 10.1.4 节 “复制语法”) 或者用于 xargs(1) (参见第 9.3.9 节 “使用文件循环来重复一个命令”)。通过 find 的命令行参数能够使其功能得到加强。
以下是 find(1)基本语法的总结。
find 条件参数的运算规则是从左到右。
一旦输出是确定的,那么运算就会停止。
“逻辑 OR“ (由条件之间的 “
-o
“ 参数指定的)优先级低于 “逻辑 AND“ (由 “-a
“ 参数指定或者条件之间没有任何参数)。”逻辑 NOT“ (由条件前面的 “
!
“ 指定) 优先级高于 “逻辑 AND”。“
-prune
“ 总是返回逻辑 TRUE 并且如果这个目录是存在的,将会搜索除这个目录以外的文件。“
-name
“ 选项匹配带有 shell 通配符 (参见第 1.5.6 节 “Shell 通配符”) 的文件名但也匹配带有类似 “*
“ 和 “?
“ 元字符的.
“。(新的 POSIX 特性)“
-regex
“ 匹配整个文件路径,默认采用 emacs 风格的 BRE (参见第 1.6.2 节 “正则表达式”)。“
-size
“ 根据文件大小来匹配 (值前面带有 “+
“ 号匹配更大的文件,值前面带有 “-
“ 号匹配更小的文件)“
-newer
“ 参数匹配比参数名中指定的文件还要新的文件。“
-print0
“ 参数总是返回逻辑 TRUE 并将完整文件名 (null terminated) 打印到标准输出设备上。
如下是 find(1) 语法格式。
# find /path/to \
-xdev -regextype posix-extended \
-type f -regex ".*\.cpio|.*~" -prune -o \
-type d -regex ".*/\.git" -prune -o \
-type f -size +99M -prune -o \
-type f -newer /path/to/timestamp -print0
这些命令会执行如下动作。
查找 “
/path/to
“ 下的所有文件限定全局查找的文件系统并且使用的是 ERE (参见第 1.6.2 节 “正则表达式”)
通过停止处理的方式来排除匹配 “
.*\.cpio
“ 或 “.*~
“ 正则表达式的文件通过停止处理的方式来排除匹配 “
.*/\.git
“ 正则表达式的目录通过停止处理的方式来排除比 99MB (1048576字节单元) 更大的文件
显示文件名,满足以上搜索条件并且比 “
/path/to/timestamp
“ 新的文件
请留心以上例子中的 “-prune -o
“ 排除文件的习惯用法。
注意 | |
---|---|
对于非 Debian 系的 Unix-like 系统,有些参数可能不被 find(1) 命令所支持。在这种情况下,应该考虑调整匹配方法并用 “ |