一、 命令功能: 从指定的查找范围开始,递归查找子目录,对于满足条件的文件或目录,执行规定的动作。

二、 命令格式: find [搜索路径]  [选项]  [动作选项]

示例:find path1 path2 -name *.c -print    根据名字递归查找path1和path2中以 .c 为后缀的文件或目录并打印

三、 命令选项:

-name   文件名匹配
   -type   文件类型匹配 :f 普通文件、d 目录、l 链接文件、c 字符设备文件, b 块设备文件、 p 管道文件
   -inum   指定节点号
±
±

         其它选项

    -user  文件主

    -group  用户组

    -depth  路径深度

    -maxdepth 最大搜索深度

    -perm 指定文件访问权限

    复合条件可以使用 !非、 \ 与、-o 或 

四、 动作选项:

        -print   打印查找到的路径

        -exec  对查找到的目标执行某一命令  -exec + [命令] + {} + \;   其中 {} 表示查找到的路径名,命令最后以 \; 结尾

        -ok      同 -exec ,但执行前要确认

五、 使用举例:

• find. -type d -print

• 从当前目录开始查找,寻找所有目录,打印路径名

• 按层次列出当前的目录结构

 

• find / -name 'stud*' -type d -print

• 指定了两个条件:名字与 stud* 匹配,类型为目录

• 两个 条件逻辑“与” ,必须同时符合这两个条件

 

• find / -type f - mtime -10 -print

• 从根目录开始检索最近 10 天之内曾经修改过的普通磁盘文件

 

 

• find . - atime +30 - mtime +30 -print

• 从当前目录开始检索最近 30 天之内既没有读过,也没有写过,而且也没有被当作命令执行过的文件

• 筛选出一个时间周期内不活跃的文件

 

• find  .  !  -type d -links +2 -print

• 从当前目录开始检索 link 数大于 2 的非目录文件

• 条件“非” 用!

• 注意: ! 号与 -type 之间必须保留一空格

 

 

• 找出  lyj  用户主目录下所有的 .txt 文件并删除

• find /home/ lyj -name "*.txt" -ok rm {} \;

• 上例中, -ok-exec 行为一样,不过它会给出提示,是否执行相应的操作。

 

• 查找当前目录下所有 .txt 文件并把他们拼接起来写入到 all.txt 文件中

• find . -type f -name “*.txt” -exec cat {} \;> all.txt

 

        •将30天前的.log文件移动到old目录中

• find . -type f - mtime +30 -name "*.log" -exec cp {} old \;

 

 

• find / -size +100000c \( -name core -o   -name '*. tmp ' \) -print

 

• 寻找 大于 100K 的名 叫 core 或有 . tmp 后缀

• 使用了两 条件“或” (- o ) 及组合 ( 圆括号 )

• 不要遗漏了所必需的引号,反斜线和空格,尤其是圆括号前和圆括号后。圆括号 是 shell 的 特殊字符

 

• 其他写法

find / -size +100000c '(' -name core -o -name \*.tmp ')' -print

find / -size +100000c  \( -name core –o -name \*.tmp ')' -print

 

• find / -name make -print -exec ls -l {} \;

 

• -exec 及随后的分号之间的内容作为一条命令执行

• shell 中分号有特殊含义,前面加反斜线 \

• {} 代表所查到的符合条件的路径名。注意,两花括号间无空格,之后的空格不可省略

• 对所有满足条件的文件或目录,依次执行 print 和 exec 命令

 

• -ok 选项在执行指定的命令前等待用户确认

 

• find / -size +100000c \( -name core -o name '*. tmp ' \) -ok rm {} \ ;

 

•利用find的递归式遍历目录的功能

  将当前目录下所有文件拷贝到目录 ../ bak 中

 

• 执行 cp * ../ bak 命令:如果当前目录下文件太多 shell 扩展*时失败,从而不能执行期望的功能

 

• 用 find 命令与 cp 命令配合工作

• find . -type f - maxdepth 1 -exec cp {} ../ bak \;

• 选项 - maxdepth 1 将 find 的搜索深度限制为最多 1 层,如果当前目录有子目录,就不再检索子目录