文件查找

locate:非实时,根据数据库进行查找,模糊匹配。

updatedb手动生成数据库。

find:最常用的查找命令,功能强大,非常消耗系统资源。

格式:find+查找路径+查找标准+查找到后的处理动作

查找路径:默认为当前目录

查找标准:默认为指定目录下的所有文件

处理动作:默认为显示

    -print:显示

    -ls:类似ls -l的形式显示每一个文件的详细信息

    -ok COMMAND {}\;  : 每一个操作需要用户确认

    -exec COMMAND {}\ :不需要用户确认

        例如:find /tmp -perm -020 -exec mv {} {}.new \;   花括号中是引用找到的文件


匹配标准:-name 精确匹配

-iname 不区分大小写

-regex 基于正则表达式查找

-user 根据属主查找

-group 根据属组查找

-uid 根据uid查找

-gid 根据gid查找

(如果文件的属主属组被删除,则文件属性显示被删属主属组的ID号)

-nouser 查找没有属主的文件

-nogroup 查找没有属组的文件

-type 根据文件类型查找

-perm MODE精确权限匹配

        /MODE 九位权限中有任何一位匹配都行

        -MODE 文件的权限包含查找的权限,例如 766 包含622

        +MODE

-size 根据文件的大小查找,默认为字节

([+|-]Num[k,M,G],如果查找的文件大小为10k,则显示9k到10k的文件,其他单位也是)

组合条件: -a 与

-o 或

-not 非

(不指定组合条件,默认为-a)


xargs


xargs  [-0prtx] [-E  eof-str] [-e[eof-str]] [--eof[=eof-str]] [--null]

       [-d delimiter] [--delimiter delimiter]  [-I  replace-str]  [-i[replace-

       str]] [--replace[=replace-str]]   [-l[max-lines]]   [-L   max-lines]

       [--max-lines[=max-lines]] [-n max-args] [--max-args=max-args] [-s  max-

       chars]  [--max-chars=max-chars] [-P max-procs] [--max-procs=max-procs]

       [--interactive]     [--verbose]     [--exit]   [--no-run-if-empty]

       [--arg-file=file]   [--show-limits]   [--version]   [--help]   [command 

       [initial-arguments]]

最经典应用模式:  somecommand |xargs -item  command  

不带command ,默认的使用echo 输出

用途:

    1.构造参数列表并运行命令,即将接收的参数传递给后面的command 命令执行

    2.将多行输入转换为单行 (特殊功效)

优点:

       1. 将输入参数整理后,去除<newline>换行符,以一个列表形式处理

       2. 避免参数过长引发的问题,使用xargs -n 参数适当控制,对于经常产生大量输出的命令如find、locate和grep来说非常有用

XARGS 一般是和管道一起使用:

XXcomand  | xargs  -x  comand initial-args

-x 代表选项

选项:

-p 操作具有可交互性,每次执行comand都交互式提示用户选择

-i -i 选项告诉 xargs 可以使用{}代替传递过来的参数, 建议使用-I,其符合POSIX标准

-I

 格式: xargs  -I  rep-str  comand  rep-srt             rep-str 为代替传递给xargs参数, 可以使 {} $ @ 等符号 ,其主要作用是当xargs   command 后有多个参数时,调整参数位置。例如:

          find  . -name  "*.txt "  |xargs -I {}  cp {} /tmp  

-t    启用命令行输出模式:其先回显要运行的命令,然后执行命令,打印出命令结果,跟踪与调试xargs的利器,也是研究xargs运行原理的好办法;

-r

   如果没有要处理的参数传递给xargsxargs 默认是带 空参数运行一次,如果你希望无参数时,停止 xargs,直接退出,使用 -r 选项即可,其可以防止xargs 后面命令带空参数运行报错。If the standard input does not contain any nonblanks, do not run the command, exit

-s size

   设置每次构造Command行的长度总大小,包括 command +init-param +传递参数,Size 参数必须是正整数

-L num

   从标准输入一次读取num行送给Command命令 ,-l和-L功能一样,不建议使用。

-n

  xargs 的-n选项设置每次送给command命令的参数个数,参数以空白字符或<newline>换行符分割

   -L 和 -n 标志是互相排斥的;最后指定的标志生效。

  -x 如果有任何 Command 行大于 -s Size 标志指定的字节数,停止运行 xargs 命令,-L -I -n 默认打开-x参数

常见的经典用法:

    find . -name "*.txt" |xargs rm {}

帮助理解各个参数的实例

-t  参数,打开调试功能,显示每次所组的命令,在调试中非常有用,可以看出xargs的执行原理

-L num 参数控制每次输入的行数,如下是控制每次输入2行

[cpp] view plain copy

[root@andes.com ~/tmp/dir]#ls -l  

total 44  

-rwx------ 1 root root 1026 Sep 27 05:28 data.txt  

-rw-r--r-- 1 root root 1047 Sep 27 05:28 d.txt  

-rwx------ 1 root root 2009 Sep 27 05:28 env2.txt  

-rwx------ 1 root root 2009 Sep 27 05:28 env.txt  

-rwx------ 1 root root 1998 Sep 27 05:28 export2.txt  

-rwx------ 1 root root 1998 Sep 27 05:28 export.txt  

-rwx------ 1 root root   28 Sep 27 05:28 fuck.txt  

-rwx------ 1 root root 5373 Sep 27 05:28 set.txt  

-rw-r--r-- 1 root root   21 Sep 27 05:28 s.txt  

-rw-r--r-- 1 root root   35 Sep 27 10:13 t.txt  

[root@andes.com ~/tmp/dir]#ls -l |xargs -t -L 2  

/bin/echo total 44 -rwx------ 1 root root 1026 Sep 27 05:28 data.txt  

total 44 -rwx------ 1 root root 1026 Sep 27 05:28 data.txt  

/bin/echo -rw-r--r-- 1 root root 1047 Sep 27 05:28 d.txt -rwx------ 1 root root 2009 Sep 27 05:28 env2.txt  

-rw-r--r-- 1 root root 1047 Sep 27 05:28 d.txt -rwx------ 1 root root 2009 Sep 27 05:28 env2.txt  

/bin/echo -rwx------ 1 root root 2009 Sep 27 05:28 env.txt -rwx------ 1 root root 1998 Sep 27 05:28 export2.txt  

-rwx------ 1 root root 2009 Sep 27 05:28 env.txt -rwx------ 1 root root 1998 Sep 27 05:28 export2.txt  

/bin/echo -rwx------ 1 root root 1998 Sep 27 05:28 export.txt -rwx------ 1 root root 28 Sep 27 05:28 fuck.txt  

-rwx------ 1 root root 1998 Sep 27 05:28 export.txt -rwx------ 1 root root 28 Sep 27 05:28 fuck.txt  

/bin/echo -rwx------ 1 root root 5373 Sep 27 05:28 set.txt -rw-r--r-- 1 root root 21 Sep 27 05:28 s.txt  

-rwx------ 1 root root 5373 Sep 27 05:28 set.txt -rw-r--r-- 1 root root 21 Sep 27 05:28 s.txt  

/bin/echo -rw-r--r-- 1 root root 35 Sep 27 10:13 t.txt  

-rw-r--r-- 1 root root 35 S  

-n num  控制每次输入的参数个数

假设你希望使用 rm 命令(该命令将作为 xargs 命令的参数)删除文件。然而,rm 只能接受有限数量的参数。如果你的参数列表超出该限制怎么办?xargs 的 -n 选项限制单个命令行的参数个数。

[cpp] view plain copy

[root@andes.com ~/tmp/dir]#ls  

data.txt  d.txt  env2.txt  env.txt  export2.txt  export.txt  fuck.txt  set.txt  s.txt  t.txt  

[root@andes.com ~/tmp/dir]#ls |xargs -t -n 2 file  

file data.txt d.txt  

data.txt: ISO-8859 text  

d.txt:    ISO-8859 text  

file env2.txt env.txt  

env2.txt: ASCII text, with very long lines  

env.txt:  ASCII text, with very long lines  

file export2.txt export.txt  

export2.txt: ASCII text, with very long lines  

export.txt:  ASCII text, with very long lines  

file fuck.txt set.txt  

fuck.txt: ASCII text  

set.txt:  ASCII text, with very long lines  

file s.txt t.txt  

s.txt: ASCII text  

t.txt: ASCII text  

[root@andes.com ~/tmp/dir]#  

-E  EOF 指定输入结束符

[cpp] view plain copy

[root@andes.com ~/tmp/dir]#cat t.txt  

tata-hi -fuck - ok  

fuck _you _ you  

[root@andes.com ~/tmp/dir]#xargs -a t.txt -E _  

tata-hi -fuck - ok fuck _you  

[root@andes.com ~/tmp/dir]#xargs -a t.txt -E -  

tata-hi -fuck  

-r  xargs 默认是空参数comand也要执行一次,如使用-r参数遇到空参数则直接退出,不会再执行一次,避免程序执行错误。

[cpp] view plain copy

[root@andes.com ~/tmp/dir]#ls  

data.txt  d.txt  env2.txt  env.txt  export2.txt  export.txt  fuck.txt  set.txt  s.txt  t.txt  

[root@andes.com ~/tmp/dir]#ls |grep Tata  

[root@andes.com ~/tmp/dir]#ls |grep Tata |xargs -t  

/bin/echo  

 

[root@andes.com ~/tmp/dir]#ls |grep Tata |xargs -t -r  

[root@andes.com ~/tmp/dir]#