一、工作方式

    沿着文件层次结构向下遍历,匹配符合条件的文件,并执行相应的操作。

二、基本用法

    (1)根据文件名或正则表达式匹配搜索

        find  搜索路径 -name "文件名"

        eg.

             ①在当前目录下搜索以.txt结尾的文件,默认使用‘\n’为定界符,分隔文件名(即一个结果一行)

         find . -name "*.txt"

                ②在/opt目录下搜索以.pdf结尾的文件,使用-print指定‘\0’作为定界符,分隔文件名

         find /opt -name "*.pdf" -print0

              ③在上级目录下搜索文件名包含pdf,并且不区分大小 , -iname

         find .. -iname "*pdf*"

                 ④在当前目录下搜索以.txt或则.pdf的文件, 或 -o

         find . \(  -name "*.txt" -o -name "*.pdf"  \)

                  ⑤当前目录下,以linux开头并且以.pdf结尾的文件, 且 -a

         find . \(  -name "linux*"  -a  -name "*.pdf"  \)

                  ⑥-name是以文件名进行匹配,而-path将文件路径作为一个整体进行匹配

                        在/home目录下搜索包含sys的文件或则路径

         find /home -path "*sys*"

    (2)否定参数

                使用 ! 进行参数的否定

            eg.

                ①在当前目录下搜索除了以.txt结尾的文件

         find ! -name "*.txt"

    (3)基于目录深度的搜索

                -mindepth 至少开始搜索的深度

                -maxdepth 最多搜索的深度

            eg.

                ①从第二层开始搜索

         find / -mindepth 2 -name "*.pdf"

                ② 最大搜索4层

         find / -maxdepth 4 -name "*.txt"

                ③只搜索一层

         find / -maxdepth -name "*.chm"

    (4)让find跳过特定的目录

                -prune 跳过指定目录

          eg.

                ①在/opt/eclipse目录下搜索文件以.ini结尾的文件,并且跳过目录dropins目录

         find /opt/eclipse \( -name "dropins" -prune  \) -o \( -name "*.ini"  \)

    (5)根据文件类型

            

文件类型
类型参数
普通文件
f
符号文件
l
目录
d
字符设备
c
块设备
b
套接字
s
FIFO(管道)
p
        find -type 文件类型 commands

        eg.         

            ①当前目录下查找文件

        find . -type f

           ② 列出当前目录下的所有符号链接文件

        find . -type l

     (6)根据文件时间戳

            访问时间:用户最近一次访问文件的时间

            修改时间:文件内容最后一次被修改的时间

            变化时间:文件元数据(metadata, 例如权限或所有权)最后一次改变的时间

具体时间前的

- 表示小于这个时间

+ 表示大于这个时间

访问时间
atime
amin
修改时间
mtime
mmin
变化时间
ctime
cmin

        eg.

            ①当前目录下最近7天内被访问过的文件

        find . -type f -atime -7

            ②当前目录下被修改超过9天的文件

        find . -type f -mtime +9

            ③当前目录下被修改超过3分钟的文件

        find . -type f -mmin +3

    (7)基于文件大小

文件大小
单位
c
byte
w
2 byte
b
块 (512byte)

k

1024 byte
M
1024 k
G
1024 M

        eg.

            ①根目录下文件大小大于3K

        find / -type f -size +3k

            ②根目录下文件大小小于2M

        find / -type f -size -2M

            ③根目录下文件大小为2G

        find / -type -size 2G

    (8)基于文件权限和所有权的匹配

            -perm 指定搜索的文件的权限

            -user 指定搜索某个用户的文件

            eg.

            ①当前目录下的具有644权限的py文件

       find . \( -type f -a -name "*.py" -a -perm 644 \)

          ②当前目录下,属于用户root的文件

       find . -type f -user root

     (9)结合find命令使用 -exec 选项

                使用-exec执行其他命令

                eg.

              ①将当前目录下的root用户的文件改为my用户的

        find . -type f -user root -exec chown my {} \;

                {}是一个特殊字符串,和-exec一起使用时,{}将用每一find的结果进行替换

            ②将当前目录下所有的txt文件合并到一个文件中

        find . -type f -exec cat {} \; > all.txt

                这里使用的是> 而没有使用>>,因为find命令的全部输出只是一个单一流,只有多个数据流被追加到同一个文件时才使用>>.

    (10)删除匹配的文件

            -delete可以删除find找到的文件

            eg.

             ①删除当前目录下的.swap文件

        find . -type f -name "*.swap"  -delete