管道和xargs区别

一直弄不懂,管道不就是把前一个命令的结果作为参数给下一个命令吗,那在 | 后面加不加xargs有什么区别 NewUserFF 写道: 懒蜗牛Gentoo 写道: 管道是实现“将前面的标准输出作为后面的标准输入” xargs是实现“将标准输入作为命令的参数”

你可以试试运行:

代码: echo "--help"|cat echo "--help"|xargs cat

看看结果的不同。

试过了,依然不是很确定的明白到底是什么意思,自己再探索一下看看把

如果你直接在命令行输入cat而不输入其余的任何东西,这时候的cat会等待标准输入,因此你这时候可以

通过键盘输入并按回车来让cat读取输入,cat会原样返回。而如果你输入--help,那么cat程序会在标准输出上

打印自己的帮助文档。也就是说,管道符 | 所传递给程序的不是你简单地在程序名后面输入的参数,它们会被

程序内部的读取功能如scanf和gets等接收,而xargs则是将内容作为普通的参数传递给程序,相当于你手写了

cat --help

来自:http://forum.ubuntu.org.cn/viewtopic.php?t=354669

补充解释:

在一个目录中有如下三个文件

a.c        b.c            c.c

find   . /   -print命令会打印出三个文件名

find . /    -print | grep a.c  只会打印出a.c这个文件

如果只输入命令grep a.c

那么你在键盘中只输入a.c字符串时,a.c会被打印两次,否则只打印你输入的字符

如果要找三个文件中,那个文件包括有hello字符

find ./ -print | xargs grep hello

总结:管道符后不加xargs相当于先将xargs后面的命令回车执行一下再从键盘里输入

管道符前面命令执行的结果内容

加上xargs 相当于直接从键盘输入管道符前面命令执行的结果内容再回车

再总结一下,就是回车的先后顺序不太一样。

时间: 2024-11-04 21:44:43

管道和xargs区别的相关文章

linux(5)--补充(管道| / 重定向> / xargs)/find 与xargs结合使用/vi,grep,sed,awk(支持正则表达式的工具程序)

本节中正则表达式的工具程序 grep,sed和awk是重点,也是难点!!! 先补充一下一. 管道| / 重定向> / xargs 如:1. 管道和重定向的区别:具体可以见 http://www.cnblogs.com/chengmo/archive/2010/10/21/1856577.html以此为例: cat test.sh test1.sh 2>/dev/null | grep -n 'echo' 此时若test.sh 不存在,报错信息不会输出到屏幕中,而是转入 /dev/null中,如

管道和xargs的理解

最近学习了linux的一些命令,看到一连串的管道符合xargs就懵球子了.就仔仔细细的学了学二者的区别 先总体说一下区别: 管道符 |  的意思就是说,将前一个命令的标准输出作为后面一个命令的标准输入. xargs 的意思就是说,把标准输入格式化为一行,作为后面的命令的命令行参数. 下面我们举个栗子 : 看懂了没? cat file.txt 我们看到文件里面是什么内容,然后我们再次 cat file.txt | xargs 一下,发现结果都变成一行了,这就是所谓的格式化为一行. 接下来我们看,c

管道和xargs的问题

***大家好,我是Linux初学者,对于管道和xargs的区别一直不是很清晰,最近查了很多博客,通过总结各位大牛的文章,发表一下我对管道和xargs的见解.*** 举个经典的例子:首先当前目录处于/root,里面有anaconda-ks.cfg, a.txt, install.log, install.log.syslog,四个文件.键入以下命令: echo '--help' | ls 单纯的管道 echo '--help' | xargs ls xargs命令 第一条命令的结果: anacon

老男孩教育每日一题-2017年5月18日-说说|(管道)与|xargs(管道xargs)的区别

1.题目 2.参考答案 find  |xargs ls -ld##把前一个命令的结果,通过管道传递给后面的命令(ls -ld),传递的是文件名find  | 命令    ##把前一个命令的结果,通过管道传递给后面的命令,传递的是普通的文本,文字,字符串 测试方法1-sed -i参数 sed -i参数修改文件内容,后面必须要加上文件名否则会报错.no input file [[email protected] ~]# find  /oldboy/ -type f  -name "*.sh"

管道命令xargs

在研究hadoop的过程中,遇到一个小难题. 问题描述:我需要将文件夹A下的文件拷贝到文件夹B中,但是以hadoop开头的文件不要拷贝. 问题解决:ls  A|grep -v hadoop|xargs -t -I {} cp {} /B 解释:grep -v 是反选.xargs命令的功能是将管道传来的的信息作为参数赋予马上要执行的命令. 如果该命令是单参数指令,例如rm,那么很简单: ls A|xargs rm  即可. 如果该命令是多参数指令,例如cp.那可如何是好? 可以赋予-I(是大写的i

find命令处理之exec与xargs区别

对符合条件的文件执行所给的Linux 命令,而不询问用户是否需要执行该命令.{}表示命令的参数即为所找到的文件,以:表示comman命令的结束.\是转义符,因为分号在命令中还有它用途,所以就用一个\来限定表示这是一个分号而不是表示其它意思. -ok: 和-exec的作用相同,格式也一样,只不过以一种更为安全的模式来执行该参数所给出的shell给出的这个命令之前,都会给出提示,让用户来确定是否执行. xargs 要结合管道来完成 格式:find [option] express |xargs co

linux find查找并拷贝 exec xargs区别

-exec    1.参数是一个一个传递的,传递一个参数执行一次rm    2.文件名有空格等特殊字符也能处理-xargs     1.一次将参数传给命令,可以使用-n控制参数个数    2.处理特殊文件名需要采用如下方式:    find . -name "*.txt" print0 |xargs -0 rm {} find /opt/test/ -type f -name "*.txt" -exec cp {} /tmp \; find /opt/test/ -

exec与xargs区别

没有哪个更好哪个更不好 复习一下 exec是对每个找到的文件执行一次命令,除非这单个的文件名超过了几k,否则不会出现命令行超长出报错的问题. 而xargs是把所有找到的文件名一股脑的转给命令.当文件很多时,这些文件名组合成的命令行参数很容易超长,导致命令出错. find | xargs 这种组合在处理有空格字符的文件名时也会出错,因为这时执行的命令已经不知道哪些是分割符.哪些是文件名中的空格! 而用exec则不会有这个问题. $touch test/'test zzh' $find test/

对find,xargs,grep和管道的一些深入理解

转自于:http://fatmouse.xyz/2016/05/10/2016-05-10-find-grep-xargs-and-pipe/ 问题 相信大家都知道在目录中搜索含有固定字符串文件的命令: 1 find . -name '*.py' |xargs grep test 刚开始的时候,我不熟悉xargs命令,所以直接使用的命令是 1 find . -name '*.py' |grep test 结果并不是自己所期望的.此命令只是找出文件名*.txt有test的情况. 这里我就研究一下,