Linux/Mac find 命令详解

[广告:最高 ¥2000 红包]阿里云服务器、主机等产品通用,可叠加官网常规优惠使用 | 限时领取

Linux 查找命令是Linux系统中最重要和最常用的命令之一。查找用于根据与参数匹配的文件指定的条件来搜索和查找文件和目录列表的命令。查找可以在各种条件下使用,您可以通过权限,用户,组,文件类型,日期,大小等可能的条件查找文件。

语法

find  [目标路径]  [条件选项]  [处理动作]

条件选项

根据文件名查找

  • -name:根据文件名查找
  • -iname:忽略目标文件名的大小写

支持通配符:

*,?,[],[^]

  • find /etc -name(-iname)  "passwd"

    查找/etc目录下名字里面包含passwd的文件

  • find /etc -name(-iname) "p*"

    查找/etc目录下以p开头的文件


根据文件类型查找

-type:根据文件类型查找

  • f:普通文件
  • d:目录文件
  • l:符号链接文件
  • b:块设备文件
  • c:字符设备文件
  • p:管道文件
  • s:套接字文件

例:find /etc -type f  查找/etc目录下是文件。


根据文件的从属关系

  • -user USERNAME:查找属主指定用户的所有文件
    find /etc -user root
    查找/etc属主为root的所有文件
  • -group GROUPNAME:查找属组指定组的所有文件
  • -uid UID:查找属主指定的UID的所有文件
  • -gid GID:查找属组指定的GID的所有文件
  • -nousr:查找没有属主的文件
  • -nogroup:查找没有属组的文件

根据文件大小查找

-size:根据文件大小查找

常用单位:K、M、G,例:

find /etc -size [+|-]1K

查找/etc下所有大于|小于1K的文件


根据时间戳查找

默认以天为单位

  • -atime -n  # 表示文件被读取时间距现在n天以内
  • -atime +n # 表示文件被读取时间距现在n天以前
  • -ctime -6h30m #  表示6小时30分钟以内状态发生改变的文件
  • -mtime +1w # 表示1周以前被修改的文件

其中time前面的a/m/c,分别为:

  • Access – 文件最后被读取的时间
  • Modify – 文件内容最后被修改时间
  • Change – 文件元数据最后被修改时间(如,权限)

下同。


查找比某个文件旧或新的文件

  • -newer file.txt 查找创建时间比file.txt新的文件
  • -newerm file.txt # modified newer than file.txt 查找修改时间比file.txt新的文件
  • -newerX file.txt # X 可用参数为c/m/b,其中 [c]hange, [m]odified, [B]create
  • -newerXt “1 hour ago” # [t]imestamp 查找比1小时前修改/创建要早的文件

查找深度(到多少级子目录)

  • -depth NUM:在查找文件时,首先查找当前目录中的文件,然后再在其子目录(最多NUM层)中查找。
  • -maxdepth NUM : 指定最多搜索目录层级到NUM层
  • -mindepth NUM : 指定最少搜索目录NUM层级

根据文件权限查找

-perm:根据文件权限查找

-perm [/|-] 权限

例:

  1. find /etc -perm 666   查找/etc下权限为666的所有文件
  2. find /etc -perm /222  查找/etc下[u,g,o]任何一类用户有写权限的文件
  3. find /etc -perm -222  查找/etc 下[u,g,o]同时满足写权限的文件

组合参数

-a:与

find /etc -name “passwd” -a -user root

查找/etc下名字含有“passwd” 且属主为root的文件名

-o:或

find /etc -type f -o -size +10K

查找/etc下类型为文件或文件大小大于10k以上的文件

-not|!:非

find /etc ! -name “passwd”

查找/etc下名字里没有passwd的文件


处理动作

-print:默认的,输出至标准输出

-ls:相当于执行ls -l

-delete:对查找到的文件进行删除

-fls:对查找到的文件以长格式的方式保存到指定的文件中

find命令可以结合xargs命令,避免了有些命令过长导致报错;下面介绍下xargs的简单用法:

xargs命令:将前一个命令的输出作为参数

作用:是将参数列表转换成小块分段传递给其他命令,以避免参数列表过长的问题

格式:xargs [options] [command]…

常用选项:

  • -p:操作具有可交互性
  • -i:得到的每项名称替换为{}
  • -n:限制单个命令行的参数
  • -t:输出命令执行的详细信息

例:

find /etc -name "passwd" | xargs -t ls -lh

查找/etc下名字有passwd包含的文件并且人性化的输出。

参考资料

码中人 微信公众号