find命令的完整语法格式如下所示:
find [path] [options] [tests] [actions]
- path
path部分很容易理解:既可以使用绝对路径,如/bin,也可以使用相对路径,如 . 。如果需要,也可以指定多个路径,如 find /var /home。
- options
find命令有许多选项可用,下表列出几个最常用的选项。
选项 含义 -depth 在查看目录本身之前先搜索目录的内容 -follow 跟随符号链接 -maxdepths N 最多搜索N层目录 -mount(或者-xdev) 不搜索其他文件系统的中的目录(比如装的是windows和linux双系统,采用这个选项即可略过对windows系统下磁盘的查找) - tests
测试部分,可以提供给find命令的测试非常多,每种测试返回的结果有两种可能:true 或 false。find 命令开始工作时,它按照顺序将定义的每种测试一次应用到它搜索到的每个文件上。如果一个测试返回 false,find 命令就停止处理它当前找到的这个文件,并继续搜索。如果一个测试返回 true,find 命令将继续下一个测试或对它当前文件采取行动(actions)。下表列出了常用的测试。
测试 含义 -atime N 文件在N天之前被最后访问过 -mtime N 文件在N天之后最后被修改过 -name pattern 文件名(不包括路径名)匹配提供的模式pattern,为了确保pattern被传递给 find 命令而不是由shell来处理,pattern必须总是用双引号括起 -newer otherfile 文件比otherfile文件要新 -type c 文件的类型为c,c是一个特殊类型。最常见的是d(目录)和f(普通文件)。其他可用的类型可参考手册页。 -user username 文件的拥有者是指定的用户username 在shell脚本编程中,还可以用操作符来组合测试。大多数操作符有两种格式:短格式和长格式。见下表:
操作符,短格式 操作符,长格式 含义 ! -not 测试取反 -a -and 两个测试都必须为真 -o -or 两个测试有一个必须为真 也可以通过使用圆括号来强制测试和操作符的优先级。由于圆括号对shell来说有其特殊的含义,所以还必须使用反斜线来引用圆括号。此外,如果在文件名处使用的匹配模式,就必须在模式上使用引号以确保模式没有被shell扩展,而是直接传递给find命令。例如,如果想写一个测试“搜索的文件比文件X要新,或者文件名以下划线开头”,可以这样写:
\(-newer X -o -name "_*" \)
- actions
现在可以可靠地搜索文件了。下面看看在发现匹配指定条件的文件之后,可以执行的动作。下表给出了几个常见的动作。
动作 含义 -exec command 执行一条命令,这是最常见的动作之一。这个动作必须使用 \; (斜杠分号)字符对来结束。 -ok command 与-exec类似,但它在执行命令之前会针对每个要处理的文件,提示用户进行确认。这个动作必须使用 \; 字符对来结束。 -print 打印文件名 -ls 对当前文件使用命令 ls-dils -exec和-ok命令将命令行上后续的参数作为它们参数的一部分,知道被\;序列终止。实际上,-exec和-ok命令执行的是一个嵌入式命令,所以嵌入式命令必须以一个转义的分号结束,使得find命令可以决定什么时候它可以继续查找用于它自己的命令行选项。