这里只说两点:find正则匹配搜索,以及-exec选项
1.正则匹配查找

find /etc/ -type f -name "s*" ##在/etc/目录下搜索以s为文件名开头的文件;

注意:如果文件名使用正则匹配,那么需要加双引号,否则会报错;这里只列举了通配匹配方式,其他正则方式如"[ab].sh",“s?”等不再介绍;
2.使用-exec选项(shell命令执行)

在当前目录下搜索以1为文件名开头的文件,并复制到/root目录下;

find ./ -type f -name "1*" -exec cp {} /root \;

查找当前目录下所有以txt文件中包含123的数字都替换成5678

find ./ -name "*.txt" -exec  grep "123" {} \; -exec sed -i ‘s/123/5678/g‘ {} \;

注:选项-exec,后面跟要执行的shell命令,{} 花括号代表前面find查找出来的文件名,即把搜索的文件名放到花括号中,注意反斜杠\和分号;之间没有空格,这种用法通常是把搜索的结果做处理;

二、find命令配合xargs

find ./ -type f -name "1*" | xargs -i cp {} /tmp  #在当前目录下搜索以1为文件名开头的文件,并复制到/tmp目录下;

三、exec和xargs二者的区别

1.使用-exec选项,此选项是把参数一个一个传递给shell命令,即传递一个文件名执行一次cp命令;
2.而xargs命令,是把参数一次性传递,即把搜索的所有文件名一次姓传给shell命令处理;

四、常用的按要求查找

语法

find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \;

1、按时间查找(-atime访问时间  -mtime文件内容修改时间  -ctime文件自身属性修改时间)

find /tmp -type f -mtime +7 -name "*.sh" | xargs -i cp {} /data

find /tmp -type f -mtime +7 -name "*.sh" -exec cp {} /data \;

查找/var/log目录中更改时间在7日以前的普通文件,并在删除之前询问它们:
find /var/log -type f -mtime +7 -ok rm {} \;

find /test -type f -newermt 2017-06-03 -a ! -newermt 2017-06-06  按时间范围查找/test下2017-06-03到2017-06-06之间修改过的文件

2、按用户查找

find  /  -user  username  根据属主查找

3、按权限查找

find /tmp -type f -perm -0700 -name ‘*.sh‘

4、按大小查找

find /tmp -type f -size +100k -name ‘*.sh‘

5、查找空目录

find /tmp -type d -empty

https://www.cnblogs.com/f-ck-need-u/p/10704754.html

https://www.cnblogs.com/chenpingzhao/p/4623799.html  xargs详解