xargs:ex
tend arg
uments
扩展参数
在使用exec时,find命令会将所有匹配到的文件一次性传递给exec,有些系统会限制传递的长度,所以会导致exec出现数据量溢出,这个情况下可以使用xargs。
xargs是每次只获取一部分文件,先处理最先获取的文件,如此以往。
此外,exec并非为获取到的全部文件起1个进程,而是为每一个匹配到的文件发起1个进程,导致进程过多影响性能。xargs则只起1个进程。
1、对比exec、xargs,查找当前目录下的文件并测试它们属于哪类文件
[root@localhost a]# find . -type f -exec file {} \;
./ttt/2.txt: empty
./ttt/3.txt: empty
./ttt/2.sh: empty
./ttt/3.sh: empty
./ttt/file1: empty
./ttt/file2: empty
./ttt/file3: empty
./ttt/1.txt: ASCII text
./ppp/1.sh: empty
./ppp/1.txt: ASCII text
[root@localhost a]# find . -type f |xargs file
./ttt/2.txt: empty
./ttt/3.txt: empty
./ttt/2.sh: empty
./ttt/3.sh: empty
./ttt/file1: empty
./ttt/file2: empty
./ttt/file3: empty
./ttt/1.txt: ASCII text
./ppp/1.sh: empty
./ppp/1.txt: ASCII text
2、在全局查找core文件,并将结果打印到某个日志中
使用exec
find / -name "core" -exec echo "" > /home/syq/a/ppp/tmp.log {} \;
使用xargs
find / -name "core" | xargs echo "" > /home/syq/a/ppp/tmp.log
3、xargs与mv的使用
find . -name "tmp.log" | xargs -i mv {} /home/syq/a/
xargs的参数还有很多,不一一列举,记住常用的即可。