Linux查找文件 find

作者: 学习编程王同学 | 来源:发表于2018-06-12 15:13 被阅读15次

    find命令可以在文件系统中查找文件,它的一般语法为:

    find 路径... 测试... 动作...
    
    • 路径:find开始执行后,会查看每个路径及其整个目录树。
    • 测试:对于遇到的每个文件,都会进行测试。测试结果为真的文件会被做成一个列表。
    • 动作:测试完成后,对列表中的每个文件执行指定的动作。

    下面是一个例子:

    $ find ./ -name now.txt -print
    

    其中:

    • ./:路径,find会在此目录下进行搜索。路径默认为当前工作目录。
    • -name now.txt:测试,对于每个文件,测试其名字是否为now.txt,将测试为真的文件做成一个列表。
    • -print:动作,对于列表中的每个文件,执行print(显示)操作。

    路径

    find的搜索路径默认是当前工作目录,当然也可以自己指定搜索目录:

    $ find ~
    

    或者指定多个搜索目录:

    $ find /etc /opt
    

    测试

    find的常用测试如下:

    测试 含义
    -name pattern 按文件名pattern搜索文件
    -iname pattern 按文件名pattern搜索文件(不区区分大小写)
    -type [df] 文件类型测试:d代表目录,f代表普通文件
    -perm mode 文件权限测试:文件权限为mode
    -perm -mode 文件权限包含mode的文件
    -user name 拥有者为name
    -group name 所属组为name
    -uid n 拥有着id为n
    -gid n 所属组id为n
    -nonuser 搜索文件的拥有者不在 /etc/passwd 的文件
    -nongroup 搜索文件的所属组不在 /etc/group 的文件
    -size [-+]n[cbkMG] 比n字节(c)、块(b)、千字节(k)、兆字节(M)、吉字节(G)大(+)或小(-)的文件
    -empty 空文件
    -[amc]time n [amc]time在之前第n天的文件
    -[amc]time [+-] n [amc]time在n天之前(+)或之内(-)(不含第n天)的文件
    -newer file 比file还要新的文件
    -[amc]min n [amc]time在之前第n分钟的文件
    -[amc]min [+-] n [amc]time在n天之前(+)或之内(-)(不含第n天)的文件

    -type确定文件的类型,下面是三个例子:

    $ find /etc -type f -print  # 搜索/etc目录下的普通文件并显示
    $ find /etc -type d -print  # 搜索/etc目录下的目录并显示
    $ find /etc -print          # 搜索/etc目录下的任何类型的文件并显示
    

    事实上,可以多个测试组合使用:

    $ find /etc/ -type f -name group -print # 搜索/etc目录下的普通文件且文件名为group的文件并显示
    

    -perm按特定权限搜索文件:

    $ find -perm 775 -print     # 搜索工作目录中权限为775的文件并显示
    $ find -perm -111 -print    # 搜索工作目录中权限包含111的文件并显示
    

    -size按指定大小搜索文件:

    $ find -type f -size +1M -size -3M -print # 搜索工作目录中文件大小在1-3M的普通文件并显示
    

    下面的命令按时间搜索文件:

    $ find -mmin -30 -print     # 搜索30分钟内被修改的文件并显示
    $ find -mtime 0 -print      # 搜索24小时内被修改的文件并显示
    

    此外,还可以在测试条件之前使用取反,但是需要引用它:

    $ find -type f '!' -name '*.txt' -print # 搜索工作目录中文件名不以.txt结尾的普通文件并显示
    

    动作

    例子

    $ find ./ -name now.txt -print
    

    中的-print就是一个动作,它是默认的动作,因此这个例子与下面的命令是一样的:

    $ find ./ -name now.txt
    

    -fprint将结果输出到文件:

    $ find ./ -name now.txt -fprint a.txt # 将搜索结果保存到a.txt文件中
    

    -exec之后可以键入一条命令,使用{}代表find搜索到的文件:

    $ find ./ -name now.txt -exec ls -l {} ';'  # 使用ls -l处理find搜索到的每个文件
    

    这个例子中的';'代表着每个文件处理语句的结束,下面是另一个例子:

    $ find ./ -type d -exec chmod 777 {} ';' # 将工作目录下的目录文件修改为777权限
    

    相关文章

      网友评论

        本文标题:Linux查找文件 find

        本文链接:https://www.haomeiwen.com/subject/uazleftx.html