1

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

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

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

就像是

$ cp "ls | grep ab" files/

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

4

3 回答 3

6

使用以下内容:

cp `ls | grep ab` files/
于 2012-07-21T17:48:36.740 回答
6

好吧,既然 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 "$@"'
于 2012-07-21T18:14:09.463 回答
4

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

ls | grep ab | xargs cp -t files/

当然,即使这是一个人为的示例,您也不应该解析 ls 的输出

于 2012-07-21T20:31:53.703 回答