首先了解基本命令:

Linux 经常需要进行文件查找。其中查找的命令主要有find和grep。两个命令是有区的

 (1)find命令是根据文件的属性进行查找,如文件名,文件大小,所有者,所属组,是否为空,访问时间,修改时间等。 

 (2)grep是根据文件的内容进行查找,会对文件的每一行按照给定的模式(patter)进行匹配查找。

一、find 命令:

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

  部分参数说明: 

      -exec:对找到的文件执行exec这个参数所指定的shell命令,相应的形式为:-exec command {}   \; 将查到的文件进行command操作,”{}”就代替查到的文件。 

    -ok : 系统会让用户确定是否执行例子:

#将目前目录及其子目录下所有最近 20 天内更新过的文件列出 
find . -ctime -20
#查找/var/log目录中更改时间在7日以前的普通文件,并在删除之前询问它们:
find /var/log -type f -mtime +7    -ok rm {} \;
# 查找前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件:
 find . -type f -perm 644 -exec ls -l {} \;
# 为了查找系统中所有文件长度为0的普通文件,并列出它们的完整路径:
find / -type f -size 0 -exec ls -l {} \;
#查找空文件夹
find -type d -empty

二、 grep 命令:

       grep命令用于查找文件里符合条件的字符串 

       grep 用法略...

三、xargs  命令:      

somecommand |xargs -item  command

      xargs 是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。

      xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行;

参数说明:

-a file 从文件中读入作为sdtin
-e flag ,注意有的时候可能会是-E,flag必须是一个以空格分隔的标志,当xargs分析到含有flag这个标志的时候就停止。
-p 当每次执行一个argument的时候询问一次用户。
-n num 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的。
-t 表示先打印命令,然后再执行。
-i 或者是-I,这得看linux支持了,将xargs的每项名称,一般是一行一行赋值给 {},可以用 {} 代替。
-r no-run-if-empty 当xargs的输入为空的时候则停止xargs,不用再去执行了。
-s num 命令行的最大字符数,指的是 xargs 后面那个命令的最大命令行字符数。
-L num 从标准输入一次读取 num 行送给 command 命令。
-l 同 -L。
-d delim 分隔符,默认的xargs分隔符是回车,argument的分隔符是空格,这里修改的是xargs的分隔符。
-x exit的意思,主要是配合-s使用。。
-P 修改最大的进程数,默认是1,为0时候为as many as it can ,这个例子我没有想到,应该平时都用不到的吧。
find . -name  "*.txt"  | xargs rm -rf {}
find /home/  -iname  "*.sh" |xargs -I {} ls -li {}
#-i 表示 find 传递给xargs的结果 由{}来代替
find /root/ -type f -name "*.sh" | xargs -i  cp {}  /tmp/
#查找所有的jpg 文件,并且压缩它
find / -name *.jpg -type f -print | xargs tar -cvzf images.tar.gz

四、xargs 与 exec区别

-exec 
    1.参数是一个一个传递的,传递一个参数执行一次,效率低 
    2.文件名有空格等特殊字符也能处理 
-xargs  
    1.一次将参数传给命令,可以使用-n控制参数个数 
    2.处理特殊文件名需要采用如下方式:find . -name "*.txt" -print0 |xargs -0 rm {}   

     find -print0  与 xargs -0 的结合避免文件名有特殊字符如空格,引号等无法处理

 五、举例说明:

#搜索文件中含有“resines”字符串
find . -name "*.text" | xargs grep  resines 
#搜索文件名中含有的resines
find . -name "*.text" | grep resines 

#xargs还有指定参数位置的作用。假设我们要将目录下所有的.py文件放到Python目录中去,
#参数-I指定了管道前命令作为参数所应该在管道后面命令的位置。
find . -name '*.py' | xargs -I {} mv {} ./Python