管道符和xargs

先看一个例子

今天上了一门Linux课,其中有一道题是这样的:

  • 将文件/lib/目录下所有以包含.so的文件复制到cmd_test目录下

一开始看到这个题,想法是先用find命令找出包含.so的文件,然后使用管道符cp

如下:

find /lib -name "*.so*" | cp ./cmd_test

然而上面的命令是错误的,cp命令是不支持 | 管道来传递参数的。

后来搜集资料,找到了xargs命令,它可以将标准输入数据转换成命令行参数,正确的命令应该是下面的样子:

find /lib -name "*.so*" | xargs -i cp {} ./cmd_test

(-i 选项表示可以指定一个替换字符串{},当 -i 与 xargs 结合使用时,每一个参数命令都会被执行一次)

xargs和管道

所以两者到底有什么不同呢?

执行下面两个命令:

echo "--help"|cat

echo "--help"|xargs cat

会得到下面的不同结果:

你品,你细品。如果你直接在命令行输入cat后回车,而不输入命令参数,这时cat会等待标准输入,你通过键盘输入内容并按回车,cat进程会读取输入并原样返回。所以如果此时你输入–help,那么cat程序会在标准输出上输出–help,这就是使用管道符时的情况,然而使用 |xargs 时,就相当于直接将 --help 作为了 cat 命令的参数,执行了cat --help命令。

上述内容来自:https://www.cnblogs.com/lexiaofei/p/7422826.html

对于管道符:| 后的命令接收的并不是命令所执行的参数,而是将 | 前面的标准输出作为 | 后面的标准输入。
对于 xargs:xargs 后的命令可以将前面的命令的输出作为执行的参数。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值