Linux下xargs和-exec的使用及区别说明
作者:Marco1XIE
文章对比了xargs和-exec在执行Linux命令时的使用方法和区别,指出-exec对每个文件都执行一次命令,而xargs则将所有文件名组合成一个命令行参数,文章还提到,xargs在处理带空格的文件名时会出错,而-exec则每处理一个文件或目录都需要启动一次命令
xargs和-exec使用与区别
一、使用方法
- 两者都是对符合条件的文件执行所给的Linux 命令,而不询问用户是否需
- 要执行该命令
-exec:
- {}表示命令的参数即为所找到的文件,以;表示comman命令的结束,\是转义符,
- 因为分号在命令中还有它用途,所以就用\来表示这是一个分号而不是表示其它意思
find testdir/ -type f -exec echo {} \;

xargs:
要结合管道来完成
格式:find [option] express |xargs command
find testdir/ -type f | xargs cat

二、区别及优缺点
1、使用echo命令测试
find testdir/ -type f
find testdir/ -type f -exec echo {} \;
find testdir/ -type f | xargs echo

1)exec是对每个找到的文件都执行一次命令(除非这单个的文件名超过了几k,否则不会出现命令行超长出报错的问题)
2)xargs是把所有找到的文件名全部转给命令(当文件很多时,这些文件名组合成的命令行参数很容易超长,导致命令出错)
2、xargs在处理带空格的文件名时会出错
新建一个带空格的文件:
touch testdir/'space file'

分别使用xargs、-exec测试
find testdir/ -type f | xargs cat
find testdir/ -type f -exec cat {} \;

3、区别及各自优缺点
1)exec 每处理一个文件或者目录,它都需要启动一次命令;
2)exec 格式麻烦,必须用 {} 做文件的代位符,必须用 ; 作为命令的结束符;
3)xargs 不能操作文件名有空格的文件;
综上,如果要使用的命令支持一次处理多个文件,并且知道这些文件里没有带空格的文件,那么使用 xargs比较方便; 否则,就要用 -exec。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
