AIX命令参考大全,卷 2,d - h - find 命令

[ 页的底部 | 上一页 | 下一页 | 目录 | 索引 | 法律条款 ]

AIX命令参考大全,卷 2,d - h

find 命令

用途

用匹配表达式查找文件。

语法

find [ -H | -L ] Path ... [ Expression ]

描述

find 命令对每个指定的 Path 参数递归搜索目录树,搜索与布尔表达式匹配的文件,布尔表达式是使用以下文本中给出的项写的。当 find 命令递归下降目录结构时,它不会下降到那些只是象征性链接到当前层次结构的目录。find 命令的输出取决于 Expression 参数指定的项。

find 命令不支持 4.3 BSD 快速查找语法。

标志

-H 导致为命令行上多次遇到的每个符号链接求值的文件信息和文件类型成为链接引用的文件的信息和类型,而不是链接本身的。如果引用的文件不存在,则文件信息与类型将用于链接本身。不在命令行上的所有符号链接的文件信息将是链接本身的信息。
-L 导致为每个符号链接求值的文件信息和文件类型成为链接引用的文件的信息和类型,而不是链接本身的。

表达式项

这些布尔表达式和变量描述了 find 命令的搜索边界,如在 Path Expression 参数定义的那样。

注:
在下面的定义中,变量 n 指定了一个十进制的整数,它能表示为 +n(超过 n)、 -n(少于 n)或者 n(恰好等于 n)。
\( Expression \) 如果括号中的表达式为真,则求值为真。
-cpio Device 将当前的文件写入到在 cpio 命令格式中的指定设备。
-depth 始终求值为真。导致目录层次下降,这样该目录里的所有条目在该目录本身受影响之前被影响。当 find 命令和 cpio 命令一起被用来传输那些包含在无写权限的目录中的文件时,这是很有用的。
-exec 命令 如果被指定的命令运行或者返回 0 值作为退出状态时,求值为真。指定的命令的末尾必须加上括上引号的分号或者转义分号。命令参数 {} (花括号) 将被当前的路径名所替代。
-follow 导致符号的和硬链接被跟随:
-fstype 类型 如果包含文件的文件系统是一个指定的类型,其中 Type 变量有一个 jfs(日志文件系统)或者 nfs(网络文件系统)的值,求值为真。
-group Group 求值为真,如果文件属于指定的组。如果 Group 变量的值是数字,并且没有在 /etc/group 文件中出现,它就被解释成组标识。
-nogroup 求值为真,如果文件属于一个组但是不在 /etc/group 数据库中。
-inum n 求值为真,如果文件有一个索引节点与变量 n 的值匹配。
-links n 求值为真,如果文件有指定数目的链接。请参考 ln 命令中关于链接的描述。
-ls 始终求值为真。导致当前路径名与其关联统计信息一起被打印出来。这些统计信息包括以下内容:
  • 索引节点数目
  • 按千字节计的大小(1024 字节)
  • 保护方式
  • 硬链接的数目
  • 用户
  • 按字节计的大小
  • 修改时间

如果这个文件是特殊文件,则大小字段将包括主要的和次要的设备号。如果这个文件是个符号链接,则这个链接到的文件的路径名称打印时前面有 ->(连字符,大于号)。格式化与 ls -filds 命令的相类似,然而格式化在内部执行,不执行 ls 命令,因此和 ls 命令在输出中的不同可能存在,例如保护方式。

-name File 求值为真,如果 File 变量的值与文件名称匹配。可以使用通常的 shell 文件名生成字符(请参阅 sh 命令)。当从 shell 使用 find 命令时,模式应该括在引号中或者转义字符中。反斜线符号 (\) 在模式中会被用作一个转义字符。您可以使用通配符(模式匹配),只要它们在引号以内。请参阅《AIX 5L V5.2 系统用户指南:操作系统与设备》中的『『用通配符和元字符进行模式匹配』』以获取更多有关使用通配符的信息。

 


在诸如 [a-z] 的表达式中,连字符表示依照当前的整理顺序 通过。整理顺序可以定义等价的类以供在字符范围中使用。有关整理顺序和等价类的更多信息,请参阅 AIX 5L Version 5.2 National Language Support Guide and Reference 中的 『National Language Support OverviewWow』
-newer File 求值为真,如果修改当前文件的时间比 File 变量指定的更近。
-ok Command -exec 表达式一样,除了 find 命令询问您是否应当启动指定的命令。一个肯定的响应会启动这个命令。指定命令的末尾必须加上括在引号中的分号或 \;(反斜杠转义分号)。
-perm [ - ] OctalNumber

求值为真,如果文件的许可权代码恰好与 OctalNumber 参数匹配(请参阅 chmod 命令以获取文件许可权的解释)。如果可选的 -(连字符)存在,并且至少已设置了这些许可权,那么这个表达式的求值为真。OctalNumber 参数可达到 9 个八进制数。

-perm [ - ] Mode

方式参数用于表示文件的模式位。它的格式和 chmod 描述的符号方式 < 操作数一样,并且如下解释:

最初,假定模板清除了所有文件方式位。Op 符号有下列功能:

+
在模板中设置相应的方式位
-
清除相应的位
=
设置相应的方式位,不考虑进程文件模式创建掩码的内容。

op 符号 - 不能是方式的首字母。这避免了前导连字符的不明确性。因为最初的方式是所有的位都关闭,所以没有需要使用 - 作为首字母的符号方式。

如果连字符省略了,当文件许可位恰好与结果模板的值匹配时,最初求值为真。否则,如果方式以连字符作为前缀,则当至少结果模板中的所有的位都在文件许可位中设置时,最初求值为真。

Mode 参数与 chmod 命令的语法是一样的。如果文件恰好有这些许可权,这个表达式求值为真。如果可选的 -(连字符)存在,则当至少设置了这些许可时,这个表达式求值为真。

-print 始终求值为真。显示当前路径名。find 命令采用 -print 表达式,除非存在 -exec, - ls-ok 表达式。
-prune 始终求值为真。如果当前路径名是一个目录,停止它的下降。如果指定 -depth 标志,则忽略 -prune 标志。
-size n 如果文件是指定的 n 个块长(每块 512 字节),则求值为真。为了比较,文件大小四舍五入到相比差异最小的块的大小。
-size nc 如果文件恰好是指定的 n 个字节长,则求值为真。将 c 添加到变量 n 的末尾表示文件的大小是以单独的字节而非块来测量的。
-atime n 如果初始化时间减去文件访问时间,除以 86400 秒(废弃任何余数)等于 n,则求值为真。86400 秒为 24 小时。
注:
-atime 的定义更改为符合“单一 Unix 规范,V3”。如果文件在 24 小时的 n-1 到 n 的倍数的时间里被访问,则 -atime 的先前行为的求值为真。

可通过将 XPG_UNIX98 变量设置为 ON 来获得此选项的先前行为。

-ctime n 如果文件的索引节点(状态信息)在 24 小时周期的指定数目内被改动,则求值为真。
-mtime n 如果初始化时间减去文件修改时间,除以 86400 秒(废弃任何余数)等于 n,则求值为真。86400 秒为24 小时。
注:
-mtime 的定义更改为符合“单一 Unix 规范,V3”。如果文件在 24 小时的 n-1 到 n 的倍数的时间里被修改,则 -mtime 的先前行为求值为真。

可通过将 XPG_UNIX98 变量设置为 ON 来获得此选项的先前行为。

-type Type 如果 Type 变量指定了以下值之一,则求值为真:
b
块特殊文件
c
字符特别文件
d
目录
f
无格式文件
l
符号链接
p
FIFO(指定的管道)
s
套接字
-user User 如果文件属于指定用户,则求值为真。如果 User 变量的值是数字,并且不作为登录名字在 /etc/passwd 文件中出现,它解释为用户标识。
-nouser 如果文件属于不在 /etc/passwd 数据库中的用户,求值为真。
-xdev 始终求值为真。避免 find 命令从一个与 Path 参数指定的不同的文件系统中遍历。

以下表达式可通过使用以下优先权降序排列的运算符组合在一起:

  1. 表达式一个表达式和运算符的附加组(括号对于 shell 是特定的,并且需要反斜杠转义序列)。
  2. ! 表达式 — 某个表达式取反('!' 是一元“非”运算符)。
  3. 表达式 [ -a ] 表达式 — 表达式的串联(AND 运算由两个初始量的并列默示或者明确的以 -a 来规定)。
  4. 表达式-o 表达式 — 初始量的交替;-o 是 OR 运算符。如果第一个表达式是真,就不会对第二个表达式求值。
注:
当一起使用 findcpio 命令的时候,当将 -L 选项与 cpio 命令一起使用时,您必须将 -follow 选项与 cpio 命令一起使用,反之亦然。不一起使用这两个选项会造成不期望的结果。如果没有表达式, -print 就用作缺省表达式。例如,如果给定的表达式不包含任何初始量 -exec-o k 或者 -print,则那些给定的表达式将被替换为给定表达式)-print-user -group-newer 每个初始量只计算一次它们各自的参数。使用以参数 -exec 或者 -ok 指定的命令不会影响到同一个文件中的后续初始量。

退出状态

此命令返回以下出口值:

0 所有的 Path 参数都被成功遍历。
>0 发生错误。

示例

  1. 要用一个给定的基本文件名称来列出文件系统中的所有文件,请输入:
    find /  -name .profile -print
    这搜索整个文件系统并且写出以 .profile 命名的所有文件的完整路径名称。/(斜线)告诉 find 命令搜索根目录及其所有子目录。要不浪费时间,最好通过指定您认为那些文件可能存在的文件目录的方式来限定搜索。
  2. 要列出当前目录树中有特殊许可权代码的那些文件,请输入:
    find . -perm 0600  -print
    这会列举出那些所有者才有读、写权限的文件的名字。 .(点)让 find 命令搜索当前目录及其子目录。请参阅 chmod 命令以获取许可权代码的说明。
  3. 要用特定的许可权代码来搜索几个目录中的文件,请输入:
    find manual clients proposals -perm -0600  -print
    这将列举出那些有所有者读写权限和其它可能的权限的文件名称。搜索 manualclientsproposals 目录和它们的子目录。在前一个例子中,-perm 0600 只选择那些许可权代码完全与 0600 匹配的文件。在此例中,-perm -0600 选择具有允许 0600 和其它高于 0600 级别的访问的许可权代码的文件。这也与许可权代码 0622 和 2744 匹配。
  4. 要列出当前目录中在当前 24 小时的时间内更改过的所有文件,请输入:
    find .  -ctime 1  -print
  5. 要搜索那些有多个链接的常规文件,请输入:
    find .  -type f  -links +1  -print
    这将列举出那些有超过一个链接(-links+1)的普通文件的名字(-type f)。
    注:
    每个目录至少有两个链接:它父目录的入口链接和它自己的 .(点)条目。ln 命令解释多个文件链接。
  6. 要找到那些路径名称包含 find 的所有可访问的文件,请输入:
    find .  -name '*find*' -print
  7. 要除去所有那些以 a.out 或者 *.o 命名的文件,这些文件有一周没被访问并且不是使用 nfs 安装的,请输入:
    find / \( -name a.out -o -name '*.o' \) -atime +7 ! -fstype nfs -exec rm {} \;
    注:
    在表达式 -atime 中使用的数是 +7。如果您想让这个命令在那些超过一个星期(7 个 24 小时)没被访问的文件上运行,这就是正确的命令行。
  8. 要打印在当前目录或者低于当前目录的所有文件的路径名称,这其中不包括名为 SCCS 或者在 SCCS 目录中的目录,请输入:
    find .  -name SCCS  -prune -o -print
    要打印在当前目录或者低于当前目录的所有文件的路径名,并且包括在名为 SCCS 的目录中的文件,请输入:

    find . -print -name SCCS -prune
  9. 要搜索那些恰好是 414 个字节长的所有文件,请输入:

    find . -size 414c -print
  10. 要找到并删除在您的主目录中后缀为 .c 的每个文件,请输入:

    find /u/arnold -name "*.c" -exec rm {} \;

    每次 find 命令识别一个带有后缀名 .c 的文件,然后 rm 命令删除这个文件。rm 命令是为表达式 -exec 指定的唯一参数。{} (花括号) 表示当前的路径名称。

  11. 在此示例中,dirlink 是到目录 dir 的符号链接。可通过在命令行引用符号链接 dirlink 列出 dir 中的文件。要进行此操作,请输入:
    find -H dirlink -print
  12. 在此示例中,dirlink 是到目录 dir 的符号链接。要列出 dirlink 中遍历 dir 下包含任何符号链接的文件层次结构的文件,请输入:
    find -L dirlink -print
  13. 要确定符号链接 dirlink 引用的文件 dir1 是否比 dir2 新,请输入:
    find -H dirlink -newer dir2
    注:
    因为使用了 -H 标志,时间数据不从 dirlink 收集,而从 dir1(遍历符号链接时找到此文件)收集。

文件

/usr/bin/find 包含 find 命令。
/bin/find find 命令上的符号链接。
/etc/group 包含所有已知组的列表。
/etc/passwd 包含所有已知用户的列表。

相关信息

chmod 命令、cpio 命令、ln 命令、sh 命令。

AIX 5L Version 5.2 System Management Concepts: Operating System and Devices 中的 Backup Overview for System Management 介绍归档方法,包括 cpio 命令的使用。

AIX 5L Version 5.2 Files Reference 中的 Directories Overview 描述文件系统中目录的结构和特征。

《AIX 5L V5.2 系统用户指南:操作系统与设备》中的『文件类型』描述文件、文件类型、如何命令文件和如何使用通配符。

《AIX 5L V5.2 系统用户指南:操作系统与设备》中的『输入输出重定向概述』描述操作系统是如何处理输入和输出的。

《AIX 5L V5.2 系统用户指南:操作系统与设备》中的『Shell 概述』描述 shell、不同类型的 shell 和解释 shell 如何影响解释命令的方式。

《AIX 5L V5.2 系统用户指南:操作系统与设备》中的『文件和目录访问方式』介绍文件所有权和访问文件和目录的权限。

[ 页的顶部 | 上一页 | 下一页 | 目录 | 索引 | 法律条款 ]