find path -option 【 -print 】 【 -exec -ok |xargs |grep 】 【 command {} \; 】
1.path 要查找的路径
2 options 表示查找方式
-name filename #查找名为filename的文件
-perm #按执行权限来查找
-user username #按文件属主来查找
-group groupname #按组来查找
-mtime -n +n #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
-atime -n +n #按文件访问时间来查找文件,-n指n天以内,+n指n天以前
-ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
-nogroup #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-type b/d/c/p/l/f #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size n[c] #查长度为n块[或n字节]的文件
-mount #查文件时不跨越文件系统mount点
-follow #如果遇到符号链接文件,就跟踪链接所指的文件
-prune #忽略某个目录
3.exec:对匹配的文件执行该参数所给出的shell命令。
形式为command {} \;,注意{}与\;之间有空格
4. ok:与exec作用相同,
区别在于,在执行命令之前,都会给出提示,让用户确认是否执行
5.|xargs 与exec作用相同 ,起承接作用
(1)将前一个命令的标准输出传递给下一个命令,作为它的参数,xargs的默认命令是echo,空格是默认定界符
(2)将多行输入转换为单行
(3) xargs 需要结合管道使用
(4) xargs 不能操作文件名有空格的文件
find . -name "*.txt" -exec echo test {} \;
find . -name "*.txt" |xargs echo test
很明显,exec是对每个找到的文件执行一次命令,除非这单个的文件名超过了几k,否则不
会出现命令行超长出报错的问题。而xargs是把所有找到的文件名一股脑的转给命令。当文件很 多时,这些文件名组合成的命令行参数很容易超长,导致命令出错。
find . -size +100M -size -200M -exec ls -al {} \;
查找2019-08-08
到2019-11-23
号之间的文件
find /var/log/ -name '*.log' -newermt '2019-08-08' ! -newermt '2019-11-23'
找出 3 天”以前”被改动过的文件 72小时之前
find /var/log/ -mtime +3 -type f -print
找出 3 天內被改动过的文件 (0 ~ 72 小时內)
find /var/log/ -mtime -3 -type f -print
找出前第 3 天被改动过的文件 (72 ~ 96 小时)
find /var/log/ -mtime 3 -type f -print
6.需要注意的地方
find -name只能支持普通的通配符如*等,简单的-regex也不能支持扩展的正则表达式,要支持扩展的正则表达式,可用如下命令。
如要找出当前目录下字母开头至少4个数字结尾的txt文件,可以如下这么写:
find ./ -regextype 'posix-egrep' -regex '\./[a-z]+[0-9]{4,}\.txt$'
7.查找文件并排序
find ./ -type f -size +10M -print0 | xargs -0 ls -lh | sort -nr