在终端中编写命令时,如何在 Ubuntu 中通过管道传输命令及其结果。我会按顺序编写以下命令 -
$ ls | grep ab
abc.pdf
cde.pdf
$ cp abc.pdf cde.pdf files/
我想将第一个命令的结果通过管道传输到第二个命令中,并将它们全部写在同一行中。我怎么做 ?
就像是
$ cp "ls | grep ab" files/
(上面是一个人为的例子,可以写成cp *.pdf files/
)
使用以下内容:
cp `ls | grep ab` files/
好吧,既然 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 "$@"'
要使用 xargs,您需要确保文件名参数是传递给 cp 命令的最后一个参数。-t
您可以使用cp 选项来指定目标目录来完成此操作:
ls | grep ab | xargs cp -t files/
当然,即使这是一个人为的示例,您也不应该解析 ls 的输出。