find ./ -name ‘*.log’ | xargs rm
文件名中有空格的处理 1. 常用find的-print0选项使用\0来分隔而不是\n分隔,再通过xargs -0来配对保证one space.log的整体性。因为-print0后one space.log的前后各有一个\0,但是文件名中间没有。
find -name “* *.log” -print0 | xargs -0 rm -rf
xargs上处理,只要通过配合-i选项,就能宣告它的整体性 如果不使用-i,则默认是将分割后处理后的结果整体传递到命令的最尾部。但是有时候需要传递到多个位置,不使用-i就不知道传递到哪个位置了,例如重命名备份的时候在每个传递过来的文件名加上后缀.bak,这需要两个参数位。 使用xargs -i时以大括号{}作为替换符号,传递的时候看到{}就将被结果替换。可以将{}放在任意需要传递的参数位上,如果多个地方使用{}就实现了多个传递。find ./ -name ‘*.log’ | xargs -i rm ‘{}’ (引号可以不加)
find ./ -name ‘*.log’ -exec ls -l {} \;
-exec command:command 为其他指令,-exec后面可再接额外的指令来处理搜寻到的结果。
(-perm可以选择权限,-user可是选择用户,-group可以选择用户组等 )
{ }代表的是「由 find 找到的内容」,如上图所示,找到的结果会被放置到 { } 位置中;
-exec一直到 \; 是关键字,代表找到额外动作的开始(-exec)到结束(\),在这中间的就是找到指令内的额外动作;
因为「;」在bash的环境下是有特殊意义的,因此利用反斜线来跳脱。
-exec 1.参数是一个一个传递的,传递一个参数执行一次rm 2.文件名有空格等特殊字符也能处理 -xargs 1.一次将参数传给命令,可以使用-n控制参数个数 2.处理特殊文件名需要采用如下方式: find . -name “*.txt” print0 |xargs -0 rm {}
以下效果一样:(grep后均可跟-l -n等选项)
find ./ -name ‘*.log’ -exec grep ‘aaaa’ {} \; find ./ -name ‘*.log’ -print0 | xargs -0 grep ‘aaaa’./a.log find ./ -name ‘*.log’ | xargs -i grep ‘aaaa’ {}
在当前目录搜索带’energywise’行的文件
grep ‘energywise’ *
在当前目录及其子目录下搜索’energywise’行的文件
grep -r ‘energywise’ *
在当前目录及其子目录下搜索’energywise’行的文件,但是不显示匹配的行,只显示匹配的文件
grep -l -r‘energywise’ *
指定别的文件夹
grep -n ‘one’ /home/vagrant/test_xargs/*
详细参见: 关于 ‘–exec’ 参数( find 命令)及介绍 ‘xargs ’命令区别(新版) find -exec 与xargs 区别 xargs的原理剖析及用法详解 linux grep命令详解 管道命令和xargs的区别(经典解释)