find 查找
实时查找文件,查找速度慢,精确
格式
find 路径 [选项] 文件 [参数]
选项
-name 按文件名查找
-perm 按文件权限查找
-prune 可以使find不在当前指定目录下查找
-user 按文件属主查找
-mtime 按文件时间查找
-type /b/d/c/p/l/f 文件类型,块设备、目录、字符设备、管道、符号链接、普通文件
-size 文件大小,字节(+表示v大于,-表示小于,不带符号表示等于)
参数
-print 将查询结果输出到标准输出
-exec 将匹配的文件执行该参数所给的shell命令
示例
find /docment -name *.txt #根据文件名查询txt结尾的文件
find /docment -perm 755 -print #根据文件权限查找文件
find /usr -mtime 4 #查找文件更新时间距现在4天以上5天以内的文件
find /usr -mtime +4 #查找文件更新时间5天以上的文件
find /usr -mtime -4 #查找文件更新时间据现在4天以内的文件
find /document -size +100m #查找文件大于100m的文件
vim $(find / -name test.txt) #查找文件后直接用vim打开
find 搜索路径 [选项] 搜索内容 -exec 命令2 {} \;
#将find命令的结果由exec调用的命令2来处理,{}表示find执行的结果
#-ok选项和-exec选项类似,ok会进行询问再执行,exec直接执行
find / -user wang -exec cp -a {} /document/file \; 将所有属于wang用户的文件复制到指定路径
#在当前目录下(包含子目录),查找所有txt文件并找出含有字符串"bin"的行
find ./ -name "*.txt" -exec grep "bin" {} \;
#在当前目录下(包含子目录),查找10天前的log文文件
find ./ -name ".log" -mtime +10 -exec ls {} \; ( {}和\;中间有空格,\和;中间没有空格,是连接的)
#在当前目录下(包含子目录),删除10天前的log文文
find ./ -name ".log" -mtime +10 -exec rm {} \;
#在当前目录下(包含子目录),删除所有txt文件
find ./ -name "*.txt" -exec rm {} \;
#查找指定文件的父目录
find / -name 'myfile' -type f -exec dirname {} \;
逻辑关系
-a 与
-o 或
-not 非
find -user test -a -group test 查找用户名为test和所属组为test的文件
find -user test -o -user ttt 查找用户名为test或ttt的文件
find -not test 查找用户名不是test的文件
find . -size +2k -a -type f 当前目录下搜索大于2KB,且文件类型为普通文件
xargs 传参
将一个命令输出转成命令参数传递给后续命令
格式
some command | xargs [选项] command
选项
-a 从文件中读入作为输入
-n 后面加次数,表示执行一次用几个参数,默认是所有
-t 先打印,再执行
-I 或者i看系统支持{ }替换字符,表示文件内容
示例
ls *.sh | xargs ls -al #将ls输出的参数作为参数执行后续命令
ls *.sh | xargs -t ls -al #在执行后续命令前先打印要运行的命令
ls *.sh | xargs -t -I '{}' mv {} {}.bak #将所有的.sh结尾的文件,都加上.bak后缀。-I 指定'{}'表示将后面命令行的{}替换成前面解析出来的参数,默认指定{}
ls *sh | xargs -t -n2 ls -al #将参数以2个为一组传递给后续命令
ls | grep –vm "test" | xargs rm –rf {} #删除当前目录行除test文件的所有文件