find命令使用

find是Linux中强大的搜索命令,不仅可以按照文件名搜索,还可以按照权限,大小,时间等来搜索。

find相当消耗系统资源,切记搜索范围不要过大

语法格式

find  搜索路径  [选项]  搜索内容
-maxdepth level 最大搜索目录深度,指定目录为第1级
-mindepth level 最小搜索目录深度

按照文件名搜索

-name  按照文件名搜索,支持使用glob *, ? , [ ] , [^ ]
-iname 按照文件名搜索,不区分文件名大小写
-inum  按照inode号搜索 
ls -i 可以查看文件的inode号,硬链接inode号相同,该命令主要用来区分硬链接
-links n 链接数为n的文件
find / -inum 3333

按照文件大小搜索

k  M  G 默认为b 512Byte
-size 10k  文件大小等于10k 
-size -10k  文件大小小于10k
-size +10k  文件大小大于10k

安装修改时间搜索

-atime [+-] 时间   按照文件访问时间搜索
-mtime [+-] 时间  按照文件修改时间搜素
-ctime [+-] 时间  按照文件创建时间搜索 

-3 代表三天内
3  代表3-4这一天
+3 代表4天以上,也就是4天以前
还有amin mmin cmin 查找单位为分钟,time查找单位为天

安装文件权限搜索

-perm 权限模式   等于
-perm -权限模式  查找文件权限包含权限模式的文件
如查找权限为444(u,g,o) 某一个文件的的u,g,o权限要分别大于等于4才可被匹配到
如444,644 664 666 744 755 777  745等
-perm +权限模式  查找文件权限包含权限模式的任意一个权限的文件
如查找权限为444(u,g,o),只要查找文件的权限rwx中有一项符合即可被查找到
如 644  464  446等

按文件所有者和所属组搜索

-uid  按用户id查
-gid  按用户组id查
-user  按用户名查
-group 按用户组名查
-nouser 查找没有所有者的文件

按照文件类型搜索

-type d  查找目录
-type f  查找普通文件
-type l  查找软链接文件
-type c 字符设备
-type b 块设备
-type s 套接字
-type p Fifo
find /目录 -type -d或-f -empty  查找空文件或空目录

逻辑运算符

-a  and  逻辑与
-o or  逻辑或
-not  not 逻辑非

find /var -name *.log -a -atime +3 
find /var -not -name *.log

其它命令

-exec {}\ 标准格式,作用是把find结果放入{}中,
find /var -name *.log -exec ls -l {}\
-ok  与-exec相同,但是-exec直接执行不询问,-ok会询问
xargs
-a file 从文件中读入作为sdtin
-e flag ,注意有的时候可能会是-E,flag必须是一个以空格分隔的标志,当xargs分析到含有flag这个标志的时候就停止。
-n num 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的。
-i 或者是-I,这得看linux支持了,将xargs的每项名称,一般是一行一行赋值给 {},可以用 {} 代替。
-r no-run-if-empty 当xargs的输入为空的时候则停止xargs,不用再去执行了。
-s num 命令行的最大字符数,指的是 xargs 后面那个命令的最大命令行字符数。
-L num 从标准输入一次读取 num 行送给 command 命令。
-d delim 分隔符,默认的xargs分隔符是回车,argument的分隔符是空格,这里修改的是xargs的分隔符。
-x exit的意思,主要是配合-s使用。。


# rm 删除太多的文件时候,可能得到一个错误信息:/bin/rm Argument list too long. 用 xargs 去避免这个问题:
find . -type f -name "*.log" -print0 | xargs -0 rm -f
 
# xargs -0 是一个 Linux 命令,用于从标准输入或文件中读取数据,并将其转换为参数传递给另一个命令。-0 选项是用于指定输入数据的字段分隔符为 null 字符(即 ASCII 码为 0 的字符)。
统计一个源代码目录中所有 php 文件的行数:
find . -type f -name "*.php" -print0 | xargs -0 wc -l
 
# 查找所有的 jpg 文件,并且压缩它们:
find . -type f -name "*.jpg" -print | xargs tar -czvf images.tar.gz

find命令使用
http://www.jcwit.com/article/184/
作者
Carlos
发布于
2023年11月20日
许可协议