find命令介绍
find 是实时查找工具,通过遍历指定路径完成文件查找
特点:
- 查找速度略慢
- 精确查找
- 实时查找
- 查找条件丰富
格式:
find [OPTION]... [查找路径] [查找条件] [处理动作]
查找路径:指定具体目标路径;默认为当前目录。
查找条件:指定的查找标准,比如文件名、大小、类型、权限等;默认为找出指定路径下的所有文件。
处理动作:对符合条件的文件做操作,默认输出至屏幕(-print)
find命令的查找条件
指定搜索目录的层级
/etc/aaa 是1级 /etc/aaa/bbb 是2级 以此类推
-maxdepth level #最大搜索目录深度
-mindepth level #最小搜索目录深度
例子:
find /etc -mindepth 1 -maxdepth 2
先处理文件,再处理目录本身
-depth
例子:
find /root -depth
根据文件名和inode查找
-name "文件名称" #支持通配符:*, ?, [], [^],通配符要加双引号引起来
-iname "文件名称" #不区分大小写
-inum n #按inode号查找
-samefile name #相同inode号的文件
-links n #链接数为n的文件
-regex “PATTERN” #以PATTERN匹配整个文件路径,而非文件名称
例子:
find /etc/nginx -name "*.conf"
find /etc/nginx -regex ".*\.conf"
根据文件所属用户、组查找
-user USERNAME #查找属主为指定用户(UID)的文件
-group GRPNAME #查找属组为指定组(GID)的文件
-uid UserID #查找属主为指定的UID号的文件
-gid GroupID #查找属组为指定的GID号的文件
-nouser #查找没有属主的文件
-nogroup #查找没有属组的文件
根据文件类型查找
-type TYPE
TYPE可以是以下形式
f: 普通文件
d: 目录文件
l: 符号链接文件
s:套接字文件
b: 块设备文件
c: 字符设备文件
p: 管道文件
例子:
find /dev -type b
查找空文件或目录
-empty
例子:
find /root -empty
组合条件
与:-a -and
或:-o -or
非:! -not
两个表达式之间如果什么都没有,默认是”与“的关系,所以:
expr1 expr2
expr1 -a expr2
expr1 -and expr2
以上这三种情况表达的是同一种意思
德摩根定律
!A -a !B = !(A -o B)
!A -o !B = !(A -a B)
查找时不进入某个目录
查找/etc下,除了/etc/security目录以外其它所有.conf后缀的文件
find /etc -path '/etc/security' -a -prune -o -name '*.conf'
根据文件大小来查找
-size n[cwbkMG]
n #表示(n-1, n] 例如:6k 表示(5k,6k]
-n #表示[0,n-1] 例如:-6k 表示[0,5k]
+n #表示(n,∞) 例如:+6k 表示(6k,∞)
所以,-size -1M其实只能找到空文件。
find /root -size -1M -ls
以上命令-size -1M表示[0M,0M]等于空文件。
根据时间戳
time表示天、min表示分
-[a|m|c]time n
-[a|m|c]min n
n的含义
n [n,n+1)
+n [n+1,∞]
-n [0,n)
根据权限查找
perm [/|-]MODE
MODE有三种形式
MODE #不加任何符号表示精确的权限匹配
/MODE #或,任何一类(u,g,o)对象的权限中只要能一位匹配即可
-MODE #与,每一类对象都必须同时拥有指定权限
0表示不关注
处理动作
-print 默认的处理动作,显示至屏幕
-ls 类似于对查找到的文件执行"ls -dils"命令格式输出
-fls file 查找到的所有文件的长格式信息保存至指定文件中,相当于 -ls > file
-delete 删除查找到的文件,此命令慎用
-ok COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令,对于每个文件执行命令之前,都会交互式要求用户确认
-exec COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令
{} 用于引用查找到的文件名称自身
\;放在结尾是语法要求,不可以省略
例子
查找 /usr 下所有大小在50K~10m 之间且具有修改组 ID权限的文件,将这些文件放置于/root下
find /usr -perm -2000 -a -size +50k -size -11M -exec cp -a {} /root \;
xargs命令
xargs可以读取标准输入并生成参数。
许多命令不能接受过多参数,命令执行可能会失败,xargs 可以解决。
例子:
显示十个数字
seq 10 | xargs
删除当前目录的文件
ls | xargs rm
批量创建和删除用户
echo user{1..10}|xargs -n1 useradd
echo user{1..10}|xargs -n1 userdel -r