找回密码
 立即注册
  • QQ空间
  • 回复
  • 收藏

Linux命令:find

admin 2019-3-3 06:23 177人围观 Linux相关

来源于微信公众号:计算机进阶路

文件和目录操作命令

find

find命令用来在指定目录下查找文件。任何位于参数之前的字符串都是想要查找的目录名,如果不设置参数,则find命令会在当前目录下查找所有的目录和文件,并打印出来。

语法

find (选项) (参数)

说明:

find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]


  1. find命令及后面的选项和路径、操作语句,每个元素之间都至少要有一个空格。



  2. 注意先后顺序。





选项

-amin<分钟>:查找在指定时间曾被存取过的文件或目录,单位以分钟计算;

-anewer<参考文件或目录>:查找其存取时间较指定文件或目录的存取时间更接近现在的文件或目录;

-atime<24小时数>:查找在指定时间曾被存取过的文件或目录,单位以24小时计算;

-cmin<分钟>:查找在指定时间之时被更改过的文件或目录;

-cnewer<参考文件或目录>查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;

-ctime<24小时数>:查找在指定时间之时被更改的文件或目录,单位以24小时计算;

-daystart:从本日开始计算时间;

-depth:从指定目录下最深层的子目录开始查找;

-expty:寻找文件大小为0 Byte的文件,或目录下没有任何子目录或文件的空目录;

-exec<执行指令>:假设find指令的回传值为True,就执行该指令;

-false:将find指令的回传值皆设为False;

-fls<列表文件>:此参数的效果和指定“-ls”参数类似,但会把结果保存为指定的列表文件;

-follow:排除符号连接;

-fprint<列表文件>:此参数的效果和指定“-print”参数类似,但会把结果保存成指定的列表文件;

-fprint0<列表文件>:此参数的效果和指定“-print0”参数类似,但会把结果保存成指定的列表文件;

-fprintf<列表文件><输出格式>:此参数的效果和指定“-printf”参数类似,但会把结果保存成指定的列表文件;

-fstype<文件系统类型>:只寻找该文件系统类型下的文件或目录;

-gid<群组识别码>:查找符合指定之群组识别码的文件或目录;

-group<群组名称>:查找符合指定之群组名称的文件或目录;

-help或——help:在线帮助;

-ilname<范本样式>:此参数的效果和指定“-lname”参数类似,但忽略字符大小写的差别;

-iname<范本样式>:此参数的效果和指定“-name”参数类似,但忽略字符大小写的差别;

-inum<inode编号>:查找符合指定的inode编号的文件或目录;

-ipath<范本样式>:此参数的效果和指定“-path”参数类似,但忽略字符大小写的差别;

-iregex<范本样式>:此参数的效果和指定“-regexe”参数类似,但忽略字符大小写的差别;

-links<连接数目>:查找符合指定的硬连接数目的文件或目录;

-iname<范本样式>:指定字符串作为寻找符号连接的范本样式;

-ls:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出;

-maxdepth<目录层级>:设置最大目录层级;

-mindepth<目录层级>:设置最小目录层级;

-mmin<分钟>:查找在指定时间曾被更改过的文件或目录,单位以分钟计算;

-mount:此参数的效果和指定“-xdev”相同;

-mtime<24小时数>:查找在指定时间曾被更改过的文件或目录,单位以24小时计算;

-name<范本样式>:指定字符串作为寻找文件或目录的范本样式;

-newer<参考文件或目录>:查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;

-nogroup:找出不属于本地主机群组识别码的文件或目录;

-noleaf:不去考虑目录至少需拥有两个硬连接存在;

-nouser:找出不属于本地主机用户识别码的文件或目录;

-ok<执行指令>:此参数的效果和指定“-exec”类似,但在执行指令之前会先询问用户,若回答“y”或“Y”,则放弃执行命令;

-path<范本样式>:指定字符串作为寻找目录的范本样式;

-perm<权限数值>:查找符合指定的权限数值的文件或目录;

-print:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为每列一个名称,每个名称前皆有“./”字符串;

-print0:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为全部的名称皆在同一行;

-printf<输出格式>:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式可以自行指定;

-prune:不寻找字符串作为寻找文件或目录的范本样式;

-regex<范本样式>:指定字符串作为寻找文件或目录的范本样式;

-size<文件大小>:查找符合指定的文件大小的文件;

-true:将find指令的回传值皆设为True;

-typ<文件类型>:只寻找符合指定的文件类型的文件;

-uid<用户识别码>:查找符合指定的用户识别码的文件或目录;

-used<日数>:查找文件或目录被更改之后在指定时间曾被存取过的文件或目录,单位以日计算;

-user<拥有者名称>:查找符和指定的拥有者名称的文件或目录;

-version或——version:显示版本信息;

-xdev:将范围局限在先行的文件系统中;

-xtype<文件类型>:此参数的效果和指定“-type”参数类似,差别在于它针对符号连接检查。

参数

起始目录:查找文件的起始目录。

实例

  • 根据时间戳进行查找

UNIX/Linux文件系统时间戳:


  • 访问时间(-atime/天, -amin/分钟):用户最近又一次访问时间

  • 修改时间(-mtime/天,-mmin/分钟):文件最后一次修改时间

  • 变化时间(-ctime/天,-cmin/分钟):文件数据元(例如权限等)最后一次修改时间

    搜索当前目录最近4天被访问过的所有文件:

    find . -atime -4

    搜索当前目录恰好在7天前被访问过的所有文件:

    find . atime 4

    搜索当前目录更改时间距离4天以前的所有文件:

    find . atime +4




搜索当前目录访问时间超过10分钟的所有文件:

find . -amin +10

找出比file.log修改时间更长的所有文件:

find . -newer file.log

  • 用-name指定关键字查找

    在/var/log目录下查找5天前以'.log'结尾的文件:

find /var/log -mtime +5 -name '*.log'


  • 用“!”反向查找

查找当前目录下的所有目录:

find . -type d

“!”取反,查找当前目录不是目录的文件:

find . ! -type d

  • 按照目录或文件的权限来查找文件

    查找当前目录下权限为777的文件:

    find . -type f -perm 777

    查找当前目录下权限不是644的php文件:

    find . -type f -name "*.php" ! -perm 644

    查找当前目录用户tom拥有的所有文件:

    find . -type f -user tom

    查找当前目录用户组sunk拥有的所有文件:

    find . -type f -group sunk

  • 按大小查找文件

    文件大小单元:b--块(512字节);c--字节;w--字(2字节);k--千字节;M--兆字节;G--吉字节

搜索大于10KB的文件:

find . -type f -size +10k

搜索小于10KB的文件:

find . -type f -size -10k

搜索等于10KB的文件:

find . -type f -size 10k

  • 查找文件时忽略某个目录

    查找当前目录或者子目录下所有.txt文件,但是跳过子目录sk:

    find . -path "./sk" -prune -o -name "*.txt" -print

  • 根据文件或正则表达式进行匹配

    列出当前目录及子目录下所有文件和文件夹:

    find .

    在/home目录下查找.txt结尾的文件名:

    find /home -name "*.txt"

    当前目录及子目录下查找所有以.txt和.pdf结尾的文件:

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

    或者

    find . -name "*.txt" -o -name ".pdf"

    匹配文件路径或者文件:

    find /usr/ -path "*local"

    基于正则表达式匹配文件路径:

    find . -regex ".*\(\.txt\|\.pdf\)$"

    同上,忽略大小写:

    find . -iregex ".*\(\.txt\|\.pdf\)$"

  • 基于目录深度搜索

    向下最大深度限制为3:

    find . -maxdepth 3 -type f

    搜索出深度距离当前目录至少两个子目录的所有文件:

    find . -mindepth 2 -type f

  • 借助-exec选项与其他命令结合使用

    ls -l命令放在find命令的-exec中执行:

    find . -type f -exec ls -l {} \;



    -exec后面跟command命令,最后以分号;为结束符,考虑到各个系统中分号会有不同的意义,所以加反斜杠进行转义。{}的作用是指代前面find命令查找到的内容;{}前后都要有空格。

    使用-exec选项的安全模式-ok:

    find $HOME/. -name ".txt" -ok rm {} \;

    使用xargs执行命令:

    find . type f|xargs ls -l


使用技巧

  • 删除方法


进入/root目录下的data目录,删除oldboy.txt

方法1:

cd /root/data

rm oldboy.txt

方法2:

find /root/data -type f -name "*oldboy.txt" |xargs rm -f

方法3:

find /root/data -type f -name "*oldboy.txt" -exec rm {} \;

在生产环境中推荐使用方法2。

持之以恒,天天进阶




----------------------------------------------------------------------------------------------------------------------
我们尊重原创,也注重分享,文章来源于微信公众号:计算机进阶路,建议关注公众号查看原文。如若侵权请联系qter@qter.org。
----------------------------------------------------------------------------------------------------------------------

鲜花

握手

雷人

路过

鸡蛋

yafeilinux和他的朋友们微信公众号二维码

微信公众号

专注于Qt嵌入式Linux开发等。扫一扫立即关注。

Qt开源社区官方QQ群二维码

QQ交流群

欢迎加入QQ群大家庭,一起讨论学习!

我有话说......