shell中xargs、-exec与管道间的区别是什么
本文小编为大家详细介绍“shell中xargs、-exec与管道间的区别是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“shell中xargs、-exec与管道间的区别是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
1、xargs作用:
(1)将前一个命令的标准输出传递给下一个命令,作为它的参数,xargs的默认命令是echo,空格是默认定界符
(2)将多行输入转换为单行
2、使用模式:
front command | xargs -option latercommand
front command: 前一个命令
-option: xargs的选项
later command: 后一个命令
一般与管道“|”结合使用
3、xargs常用选项
-n: 指定一次处理的参数个数
-d: 自定义参数界定符
-p: 询问是否运行 later command 参数
-t : 表示先打印命令,然后再执行
-i : 逐项处理
…更多参数查看man xargs
4、xargs与管道|的区别
管道“|” 用来将前一个命令的标准输出传递到下一个命令的标准输入。
xargs 将前一个命令的标准输出传递给下一个命令,作为它的参数。
可见,标准输入与命令参数是不同的。个人理解,命令参数就是直接跟在命令后面的,标准输入可以是键盘,文件等。
所以,管道符 | 所传递给程序的不是简单地在程序名后面输入的参数,它们会被程序内部的读取功能如scanf和gets等接收,而xargs则是将内容作为普通的参数传递给程序,相当于直接跟在命令后面。况且,有些命令是不接受标准输入的,比如kill,rm等命令。
总结:管道符后不加xargs相当于先将xargs后面的命令回车执行一下再从键盘里输入管道符前面命令执行的结果内容
加上xargs 相当于执行命令(xargs后面的命令)后,直接从键盘输入管道符前面命令执行的结果内容再回车,即管道前面的结果直接跟在xargs 后面的命令后面
再总结一下,就是回车的先后顺序不太一样。
5、xargs与-exec的区别
-exec:{}表示命令的参数即为所找到的文件,以;表示comman命令的结束。\是转义符, 因为分号在命令中还有它用途,所以就用一个\来限定表示这是一个分号而不是表示其它意思。
-ok: 和 -exec 的作用相同,格式也一样,只不过以一种更为安全的模式来执行该参数 所给出的shell给出的这个命令之前,都会给出提示,让用户来确定是否执行。
#xargs将参数一次传给echo,即执行:echo begin ./xargs.txt ./args.txt
find . -name '*.txt' -type f | xargs echo begin
#exec一次传递一个参数,即执行:echo begin ./xargs.txt;echo begin ./args.txt
find . -name '*.txt' -type f -exec echo begin {} \;
xargs 要结合管道来完成 格式:find [option] express |xargs command 很明显,exec是对每个找到的文件执行一次命令,除非这单个的文件名超过了几k,否则不 会出现命令行超长出报错的问题。 而xargs是把所有找到的文件名一股脑的转给命令。当文件很多时,这些文件名组合成的命 令行参数很容易超长,导致命令出错。
另外, find | xargs 这种组合在处理有空格字符的文件名时也会出错,因为这时执行的命令 已经不知道哪些是分割符、哪些是文件名中的空格! 而用exec则不会有这个问题。
读到这里,这篇“shell中xargs、-exec与管道间的区别是什么”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341