可以使用 find 命令在整个目录及其子目录下搜索符合特定准则的文件。然后,可以在找到的文件中执行命令。
|
查找符合某种模式的文件 |
|
虽然 find 的语法较为复杂,但它有助于提高使用 HP-UX 的效率。此命令功能强大而且灵活。但是运行速度较慢,搜索多个目录时尤其如此。
假定要显示当前目录及其子目录下所有以 d 开头的文件,请输入:
find(1)
命令中的点 (.) 会使 find 搜索当前目录及其子目录。文件名后的 -name 选项或文件名模式(在这种情况下为 d*)告知 find 搜索所有符合该模式的文件。在本示例中,find 将搜索所有以 d 开头的文件名。
注意,d* 要用单引号括起来 ('d*')。如果在 find 命令中使用文件名模式,必须用单引号将其括起来,以便 shell 可以对其进行正确地解释。
|
查找晚于某个文件创建日期的文件 |
|
假定您想显示所有在某个文件创建日期之后修改过的文件。要显示 /home/leslie 目录及其子目录下所有晚于 myfile 创建日期的文件,请输入:
$ find /home/leslie -newer myfile
|
本示例可以理解为:在目录 /home/leslie 及其子目录下,查找所有在 myfile 创建日期之后修改过的文件。(要确定文件的上次修改日期,请使用 ll 命令。)
|
在文件中运行命令 |
|
可以在使用 find 命令查找到的文件中执行命令。假定您想删除当前目录及其子目录下所有扩展名为 .tmp 的文件。请输入:
$ find . -name '*.tmp' -exec rm {} \;
|
本示例查找当前目录及其子目录下所有扩展名为 .tmp 的文件,并将其显示在屏幕上,然后将其删除。-exec 选项会导致以下命令 (rm) 的执行。花括号 {} 代表使用 find 命令找到的文件。结束 exec 字符串的分号之前应添加一个反斜线 (\;)。
|
使用逻辑运算符 |
|
find 的语法中包括逻辑布尔运算符:NOT、AND 和 OR。
要查找不符合特定模式的文件,请使用 NOT 逻辑运算符,即感叹号 (!)。使用此运算符之后,必须使用选项定义文件属性,如文件名。然后,将找到不具有指定属性的文件。
例如,要查找 /tmp 下所有不属于 leslie 的文件,请使用以下命令:
$ find /tmp \( ! -user leslie \)
|
\ 避免了 shell 将圆括号视为特殊字符的可能性。
要查找具有两个不同属性的文件,请使用 AND 逻辑运算符(表达式 -a 表达式)。例如,要查找 / 下所有属于 leslie 的目录,请使用以下命令:
$ find / \( -type d -a -user leslie \)
|
要查找具有其中一个或两个属性的文件,请使用 OR 逻辑运算符(表达式 -o 表达式)。例如,要删除一周以来从未访问过的以 .o 结尾或名为 a.out 的所有文件,请使用以下命令:
$find / \( -name a.out -o -name '*.o' \) -atime +7 -exec rm {} \;
|