如何在ubuntu中管道命令

mur*_*a52 1 shell ubuntu

在终端中编写命令时,如何在Ubuntu中管道命令及其结果.我会按顺序编写以下命令 -

$ ls | grep ab
abc.pdf
cde.pdf
$ cp abc.pdf cde.pdf files/
Run Code Online (Sandbox Code Playgroud)

我想将第一个命令的结果传递给第二个命令,并将它们全部写在同一行中.我怎么做 ?

就像是

$ cp "ls | grep ab" files/
Run Code Online (Sandbox Code Playgroud)

(以上是一个人为的例子,可以写成cp *.pdf files/)

小智 6

使用以下内容:

cp `ls | grep ab` files/
Run Code Online (Sandbox Code Playgroud)


Set*_*son 5

好吧,因为xargs人放弃了,我将提供我的xargs解决方案:

ls | grep ab | xargs echo | while read f; do cp $f files/; done
Run Code Online (Sandbox Code Playgroud)

当然,这个解决方案有一个明显的缺陷:带有空格的文件会导致混乱.

没有这个漏洞的xargs解决方案?嗯...

ls | grep ab | xargs '-d\n' bash -c 'docp() { cp "$@" files/; }; docp "$@"'
Run Code Online (Sandbox Code Playgroud)

看起来有点笨拙,但它确实有效.除非你的文件中有回报,我的意思是.但是,任何这样做的人都应该得到他们所得到的.即使这是可以解决的:

find . -mindepth 1 -maxdepth 1 -name '*ab*' -print0 | xargs -0 bash -c 'docp() { cp "$@" files/; }; docp "$@"'
Run Code Online (Sandbox Code Playgroud)

  • @WilliamPursell:完全没有.它强制多个参数位于同一输入行上.比较:`ls | xargs echo | wc -l` vs`ls | wc -l`.假设您的目录中有多个文件. (2认同)