首页 > 代码库 > shell编程中的find命令

shell编程中的find命令

find命令的完整语法格式如下所示:

find  [path]  [options]  [tests]  [actions]

  1. path

    path部分很容易理解:既可以使用绝对路径,如/bin,也可以使用相对路径,如 . 。如果需要,也可以指定多个路径,如 find /var  /home。


  2. options

    find命令有许多选项可用,下表列出几个最常用的选项。

    选项含义
    -depth       在查看目录本身之前先搜索目录的内容
    -follow跟随符号链接
    -maxdepths N                                    最多搜索N层目录
    -mount(或者-xdev)                                 不搜索其他文件系统的中的目录(比如装的是windows和linux双系统,采用这个选项即可略过对windows系统下磁盘的查找

  3. 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 "_*" \)

  4. actions

    现在可以可靠地搜索文件了。下面看看在发现匹配指定条件的文件之后,可以执行的动作。下表给出了几个常见的动作。

    动作含义
    -exec command     执行一条命令,这是最常见的动作之一。这个动作必须使用 \; (斜杠分号)字符对来结束。
    -ok command与-exec类似,但它在执行命令之前会针对每个要处理的文件,提示用户进行确认。这个动作必须使用 \; 字符对来结束。
    -print打印文件名
    -ls对当前文件使用命令 ls-dils

    -exec和-ok命令将命令行上后续的参数作为它们参数的一部分,知道被\;序列终止。实际上,-exec和-ok命令执行的是一个嵌入式命令,所以嵌入式命令必须以一个转义的分号结束,使得find命令可以决定什么时候它可以继续查找用于它自己的命令行选项。



shell编程中的find命令