Linux和Unix命令 找 执行搜索目录层次结构中的文件。
语法 找 命令:
找路径… 表达式
描述
本手册页记录了GNU版本 找 。命令 找 通过根据优先级规则(参见下面的操作符部分)从左到右评估给定表达式,搜索以每个给定文件名为根的目录树,直到结果已知;换句话说,左手边是假的 和 操作,真实 要么 ,在这一点上 找 转到下一个文件名。
第一个以:开头的参数:
- -
- ( 要么 ),
- !
被视为表达的开始;之前的任何参数都是搜索路径,其后的任何参数都是表达式的其余部分。如果没有给出路径,则使用当前目录。如果没有给出表达式,则表达式 -打印 用来。
该 找 如果成功处理所有文件,则命令退出,状态为0;如果发生错误,则退出大于0。
表达式
表达式由选项组成(影响整体操作而不是特定文件的处理,并始终返回true),测试(返回true或false值)和操作(具有副作用并返回true或假值),全部由运算符分隔。表达方式 -和 假设省略了运算符。如果表达式不包含除以外的操作 -修剪 , 然后 -打印 对表达式为true的所有文件执行。
选项
所有选项总是返回true。它们始终生效,而不是仅在达到表达式中的位置时才进行处理。因此,为清楚起见,最好将它们放在表达式的开头。
-daystart | 测量时间(为 -amin,-atime,-cmin,-ctime,-mmin, 和 -mtime )从今天开始而不是从24小时前开始。 |
-深度 | 在目录本身之前处理每个目录的内容。 |
-跟随 | 取消引用符号链接。暗示 -noleaf . |
-救命 要么 - 救命 | 打印命令行用法的摘要 找 并退出。 |
-maxdepth 数 | 下降命令行参数下面的目录的最多级别(非负整数)。表达方式 -maxdepth 0 表示仅将测试和操作应用于命令行参数。 |
-mindepth 编号 | 不要在低于数字的级别(非负整数)应用任何测试或操作。表达方式 -mindepth 1 表示处理除命令行参数之外的所有文件。 |
-安装 | 不要下载其他文件系统上的目录。另一个名称 -xdev ,与其他一些版本的兼容性 找 . |
-noleaf | 不要通过假设目录包含的子目录少于其硬链接数来优化。* |
-版 要么 - 版 | 打印 找 版本号和退出。 |
-xdev | 不要下载其他文件系统上的目录。 |
*搜索不遵循Unix目录链接约定的文件系统时需要此选项,例如CD-ROM或MS-DOS文件系统或AFS卷装入点。普通Unix文件系统上的每个目录至少有2个硬链接:其名称及其名称。 (期间)进入。此外,它的子目录(如果有的话)都有。链接到该目录的条目。
什么时候 找 正在检查一个目录,在它确定了比目录的链接数少两个子目录之后,它知道目录中的其余条目是非目录( 叶 目录树中的文件)。如果只需要检查文件的名称,则无需对它们进行统计;这使搜索速度显着提高。
测试
数字参数可以指定为:
+ N | 大于 ñ。 |
-n | 小于 ñ。 |
ñ | 准确地说 ñ。 |
- 胺 | 文件上次访问 ñ 几分钟前。 |
-anewer 文件 | 最近一次访问文件比最近访问 文件 被修改了。 -anewer仅受-follow的影响,只有在命令行之前的-follow之前。 |
-atime n | 文件上次访问 ñ * 24小时前。 |
-cmin n | 文件的状态最后更改 ñ 几分钟前。 |
-cnewer 文件 | 最近更改了文件的状态,而不是修改文件。- cnewer 受到影响 -跟随 除非 -跟随 来之前 -cnewer 在命令行上。 |
-ctime n | 文件的状态最后更改 ñ * 24小时前。 |
-empty | 文件为空,是常规文件或目录。 |
-假 | 总是假的。 |
-fstype type | 文件位于指定类型的文件系统上。有效的文件系统类型因Unix的不同版本而异;在某些版本的Unix或其他版本上接受的文件系统类型的不完整列表是:ufs,4.2,4.3,nfs,tmp,mfs,S51K,S52K。您可以使用-printf和%F指令来查看文件系统的类型。 |
-gid n | 文件的数字组ID是 ñ . |
-group gname | 文件属于组gname(允许使用数字组ID)。 |
-ilname pattern | 与-lname类似,但匹配不区分大小写。 |
-iname pattern | 喜欢 -名称 ,但匹配不区分大小写。例如,模式 FO * 和 F?? 匹配文件名 富 , FOO , FOO , FOO 等 |
-inum n | 文件有inode编号 ñ . |
-ipath pattern | 喜欢 -路径 ,但匹配不区分大小写。 |
-iregex pattern | 与-regex一样,但匹配不区分大小写。 |
- 链接 | 文件有 ñ 链接。 |
-lname pattern | File是一个符号链接,其内容与shell模式匹配。元字符不会对待 / 要么 . 特别。 |
-mmin n | 文件的数据上次修改 ñ 几分钟前。 |
-mtime n | 文件的数据上次修改 ñ * 24小时前。 |
-name pattern | 文件名的基础(删除了前导目录的路径)与shell模式匹配。元字符(*, ?,和 )不匹配 . 在基本名称的开头。要忽略目录及其下的文件,请使用 -修剪 ;请参阅说明中的示例 -路径 . |
- 更新文件 | 文件最近修改过 文件 。表达方式 -newer 受到影响 -跟随 除非 -跟随 来之前 -newer 在命令行上。 |
-nouser | 没有用户对应文件的数字用户ID。 |
-nogroup | 没有组对应于文件的数字组ID。 |
-path pattern | 文件名与shell模式匹配 图案 。元字符不会对待 / 要么 . 特别;所以,例如,找 。 -path'./sr*sc 将打印一个名为./src/misc的目录条目(如果存在)。要忽略整个目录树,请使用 -修剪 而不是检查树中的每个文件。例如,要跳过目录src / emacs及其下的所有文件和目录,并打印找到的其他文件的名称,请执行以下操作:找 。 -path'./src/emacs'- prune -o -print |
-perm 模式 | 文件的权限位是完全正确的 模式 (八进制或符号)。符号模式使用模式0作为出发点。 |
-perm -mode | 所有权限位 模式 为文件设置。 |
-perm +模式 | 任何权限位 模式 为文件设置。 |
-regex pattern | 文件名与正则表达式匹配 图案 。这是整个路径上的匹配,而不是搜索。例如,要匹配名为./fubar3的文件,可以使用正则表达式 。*酒吧。 要么 。* B * 3, 但不是 湾* R3. |
-size n bckw | 文件使用 ñ 空间单位。默认情况下,单位为512字节块,如果b,则为b ñ ,如果c跟随,则为字节 ñ ,如果k跟随,则为千字节 ñ ,如果w跟随,则为2字节字 ñ 。大小不计算间接块,但它会计算实际未分配的稀疏文件中的块。 |
-真正 | 总是如此。 |
-type c | 文件是类型 C : |
b | 阻止(缓冲)特殊 |
C | 字符(无缓冲)特殊 |
d | 目录 |
p | 命名管道(FIFO) |
F | 常规文件 |
升 | 符号链接 |
小号 | 插座 |
d | 门(Solaris) |
-uid n | 文件的数字用户ID是 ñ . |
使用的 | 文件上次访问 ñ 其状态最后一次更改后的几天。 |
- 用户uname | 文件归用户所有 UNAME (允许使用数字用户ID)。 |
-xtype c | 同样的 -类型 除非文件是符号链接。对于符号链接:if -跟随 尚未给出,如果文件是指向类型文件的链接,则为true C ;如果 -跟随 已被给予,如果 C 是l。换句话说,对于符号链接, -xtype 检查文件的类型 -类型 不检查。 |
操作
-exec 命令 ;
执行 命令 ;如果返回0状态,则返回true。以下所有参数找 被视为命令的参数,直到由`;'组成的参数为止遇到了。字符串`{}'被当前文件名替换,它在命令的参数中出现的位置处理,而不仅仅是在单独的参数中,就像在某些版本的找。这两种结构都可能需要进行转义(使用“”)或引用,以防止它们被shell扩展。该命令在起始目录中执行。
-fls 文件
真正;喜欢-ls但写信给 文件 喜欢-fprint。
-fprint 文件
真正;将完整的文件名打印到文件中 文件 。如果 文件 不存在的时候找 运行,它被创建;如果确实存在,则会被截断。文件名``/ dev / stdout''和``/ dev / stderr''是专门处理的;它们分别指标准输出和标准错误输出。
-fprint0 文件
真正;像-print0但写入 文件 喜欢-fprint。
-fprintf 文件 格式
真正;像-printf但写到 文件 喜欢-fprint。
-好 命令 ;
喜欢-exec但首先询问用户(在标准输入上);如果响应不是以“y”或“Y”开头,则不要运行该命令,并返回false。
-打印
真正;在标准输出上打印完整文件名,然后是换行符。
-print0
真正;在标准输出上打印完整文件名,后跟空字符。这允许处理包含换行符的文件名由正在处理的程序正确解释找 输出。
-printf 格式
真正;打印 格式 在标准输出上,解释`'转义和'%'指令。可以使用`printf'C函数指定字段宽度和精度。与-print不同,-printf不会在字符串末尾添加换行符。转义和指令是:
一个
警钟。
b
Backspace键。
C
立即停止从此格式打印并刷新输出。
F
表格饲料。
n
新队。
r
回程。
t
水平标签。
符 v
垂直标签。
\
字面反斜杠('')。
NNN
ASCII码为NNN(八进制)的字符。
后跟任何其他字符的`'字符被视为普通字符,因此它们都被打印出来。
%%
字面百分号。
%一个
文件的最后访问时间采用C`ctime'函数返回的格式。
%一个 ķ
文件的最后访问时间,格式为 ķ ,它是`@'或C`strftime'函数的指令。可能的值 ķ 列出如下;由于系统之间的“strftime”不同,其中一些可能并非在所有系统上都可用。
@
自1970年1月1日格林尼治标准时间00:00起的秒数。
时间字段:
H
小时(00..23)
一世
小时(01..12)
ķ
小时(0..23)
升
小时(1..12)
中号
分钟(00..59)
p
locale的AM或PM
R
时间,12小时(hh:mm:ss AP M)
小号
第二(00..61)
Ť
时间,24小时(hh:mm:ss)
X
区域设置的时间表示(H:M:S)
ž
时区(例如,EDT),或者如果没有时区可确定则没有
日期字段:
一个
locale缩写的工作日名称(Sun..Sat)
一个
locale的完整工作日名称,可变长度(星期日……星期六)
b
locale的缩写月份名称(Jan..Dec)
乙
locale的完整月份名称,可变长度(January..December)
C
locale的日期和时间(Sat Nov 04 12:02:33 1989 1989)
d
每月的一天(01..31)
d
日期(mm / dd / yy)
H
与b相同
Ĵ
一年中的一天(001..366)
米
月(01..12)
ü
星期日作为星期的第一天的星期数(00..53)
w ^
星期几(0..6)
w ^
星期一作为星期的第一天的星期数(00..53)
X
区域设置的日期表示(mm / dd / yy)
ÿ
年份的最后两位数(00..99)
ÿ
年(1970年……)
%b
文件大小为512字节块(向上舍入)。
%C
文件的最后状态更改时间采用C`ctime'函数返回的格式。
%C ķ
文件的最后状态更改时间,格式为 ķ ,与%A相同。
%d
文件在目录树中的深度; 0表示该文件是命令行参数。
%F
删除了任何前导目录的文件名(仅限最后一个元素)。
%F
文件所在的文件系统的类型;此值可用于-fstype。
%G
文件的组名称,如果组没有名称,则为数字组ID。
%G
文件的数字组ID。
%H
文件名的前导目录(除最后一个元素外)。
%H
找到文件的命令行参数。
%一世
文件的inode编号(十进制)。
%K
文件大小以1K块为单位(向上舍入)。
%L
符号链接的对象(如果文件不是符号链接,则为空字符串)。
%M
文件的权限位(八进制)。
%N
文件的硬链接数。
%p
文件名。
%P
文件名,带有命令行参数的名称,在该参数下删除它。
%S
文件大小(以字节为单位)。
%T
文件的最后修改时间采用C`ctime'函数返回的格式。
%T ķ
文件的最后修改时间,以指定的格式 ķ ,与%A相同。
%u
文件的用户名,如果用户没有名称,则为数字用户ID。
%U
文件的数字用户ID。
丢弃任何其他字符的'%'字符(但打印另一个字符)。
-修剪
如果没有给出-depth,则为true;不要下降当前目录。如果给出-depth,则为false;没有效果。 -ls 真正;在标准输出上以`ls -dils'格式列出当前文件。除非设置了环境变量POSIXLY_CORRECT,否则块计数为1K块,在这种情况下使用512字节块。 按优先级递减的顺序列出: ( EXPR ) 强制优先。 ! EXPR 如果是真的 EXPR 是假的。 -不 EXPR 与…一样 ! EXPR . expr1 expr2 并且(暗示); 表达式2 不评估是否 表达式1 是假的。 表达式1 -一个 表达式2 与…一样 expr1 expr2 . 表达式1 -和 表达式2 与…一样 expr1 expr2 . 表达式1 -o 表达式2 要么; 表达式2 不评估是否 表达式1 是真的。 表达式1 -要么 表达式2 与…一样 表达式1 -o 表达式2 . 表达式1 , 表达式2 清单;都 表达式1 和 表达式2 总是被评估。的价值 表达式1 被丢弃;列表的值是。的值 表达式2 . find / home -user joe
查找用户joe拥有的目录/ home下的每个文件。 找到/ usr -name * stat
查找以“.stat”结尾的目录/ usr下的每个文件。 找/ var / spool -mtime +60
查找60天前修改过的/ var / spool目录下的每个文件。 find / tmp -name core -type f -print | xargs / bin / rm -f
查找名为的文件核心 在目录中或下面/ tmp目录 并删除它们。请注意,如果有任何包含换行符,单引号或双引号或空格的文件名,则此操作将无法正常工作。 find / tmp -name core -type f -print0 | xargs -0 / bin / rm -f
查找名为的文件核心 在目录中或下面/ tmp目录 并删除它们,以正确处理包含单引号或双引号,空格或换行符的文件或目录名的方式处理文件名。该-名称 测试来了之前-类型 测试以避免不得不打电话STAT(2) 在每个文件上。 找 。 -type f -exec file'{}';
在当前目录中或下面的每个文件上运行`file'。请注意,大括号用单引号括起来,以防止它们被解释为shell脚本标点符号。分号同样受到反斜杠的保护,但是';'也可以在那种情况下使用。 find / (-perm -4000 -fprintf /root/suid.txt'%#m%u%p n'), (-size + 100M -fprintf /root/big.txt'%-10s%p n')
遍历文件系统只需一次,将setuid文件和目录列入/root/suid.txt 和大文件到/root/big.txt. 找$ HOME -mtime 0
搜索主目录中已在过去二十四小时内修改过的文件。此命令以这种方式工作,因为自上次修改每个文件以来的时间除以24小时,任何余数都将被丢弃。这意味着要匹配-mtime 0,文件必须在过去不到24小时之前进行修改。 找 。 -perm 664
搜索对其所有者和组具有读写权限的文件,但其他用户可以读取但不能写入的文件。符合这些条件但设置了其他权限位的文件(例如,如果有人可以执行该文件)将不匹配。 找 。 -perm -664
搜索对其所有者和组具有读写权限以及其他用户可以读取的文件,而不考虑是否存在任何额外的权限位(例如可执行位)。例如,这将匹配具有模式0777的文件。 找 。 -perm / 222
搜索某人(他们的所有者,他们的团队或其他任何人)可写的文件。 找 。 -perm / 220 找 。 -perm / u + w,g + w 找 。 -perm / u = w,g = w
所有这三个命令都做同样的事情,但第一个使用文件模式的八进制表示,另外两个使用符号形式。这些命令都搜索可由其所有者或其组写入的文件。所有者和组都不必写入要匹配的文件;要么会做。 找 。 -perm -220 找 。 -perm -g + w,u + w
这两个命令都做同样的事情;搜索其所有者及其组可写的文件。 找 。 -perm -444 -perm / 222! -perm / 111 找 。 -perm -a + r -perm / a + w! -perm / a + x
这两个命令都搜索每个人都可读的文件(-perm -444或-perm -a + r),至少有写位设置(-perm / 222或-perm / a + w)但不可执行任何人(分别是!-perm / 111和!-perm / a + x) 重要: 使用 人 命令( % 人 )查看特定计算机上如何使用命令。运营商
例子