如何在ubuntu中管道命令

时间:2012-07-21 17:47:06

标签: shell ubuntu

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

$ ls | grep ab
abc.pdf
cde.pdf
$ cp abc.pdf cde.pdf files/

我想将第一个命令的结果输入到第二个命令中,并将它们全部写在同一行中。我该怎么做?

类似

$ cp "ls | grep ab" files/

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

3 个答案:

答案 0 :(得分:6)

使用以下内容:

cp `ls | grep ab` files/

答案 1 :(得分:5)

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

ls | grep ab | xargs echo | while read f; do cp $f files/; done

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

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

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

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

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

答案 2 :(得分:4)

要使用xargs,您需要确保filename参数是传递给cp命令的最后一个参数。您可以使用cp的-t选项来指定目标目录:

ls | grep ab | xargs cp -t files/

当然,即使这是一个人为的例子,你should not parse the output of ls