在终端中编写命令时,如何在Ubuntu中管道命令及其结果。我会按顺序编写以下命令 -
$ ls | grep ab
abc.pdf
cde.pdf
$ cp abc.pdf cde.pdf files/
我想将第一个命令的结果输入到第二个命令中,并将它们全部写在同一行中。我该怎么做?
类似
$ cp "ls | grep ab" files/
(以上是一个人为的例子,可以写成cp *.pdf files/
)
答案 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。