Linux命令输出作为另一命令的参数(Linux command output as a param

2019-07-03 13:49发布

我想传递一个命令的元件的输出列表作为另一命令的参数。 我已经发现了一些其他页面:

  • 如何显示在stdout Linux命令的输出,并还管到另一个命令?
  • 使用bash命令(管)的输出作为另一个命令中的参数

但他们似乎更复杂。

我只是想将文件复制到到Linux调用的每个结果find命令。

这里有什么问题?:

find . -name myFile 2>&1 | cp /home/myuser/myFile $1

谢谢

Answer 1:

这是你想要什么:

find . -name myFile -exec cp /home/myuser/myFile {} ';'

这方面的一个细分/解释:

  • find :调用find命令
  • . :从开始的当前工作目录进行搜索。
  • 由于没有指定任何深度的标志,这将递归地搜索所有子文件夹
  • -name myFile :找到明确的名称的文件myFile
  • -exec :对于搜索结果,执行与他们额外的命令
  • cp /home/myuser/myFile {}拷贝/home/myuser/myFile覆盖由返回的每个结果find到; 认为{}为其中每个搜索结果去。
  • ';' :用于区分不同的命令后运行find


Answer 2:

有一对夫妇的方式来解决这个问题,这取决于你是否需要担心在其名称中空格或其他特殊字符的文件。

如果没有文件名有空格或特殊字符(它们只包含字母,数字,破折号和下划线),再下面是一个简单的解决方案,将工作。 您可以使用$(command)执行命令,并将结果代入另一个命令的参数。 外壳将拆分结果的空格,制表符,换行符,并for分配给每个价值$f反过来,并在每个值运行命令。

for f in $(find . -name myFile)
do
    cp something $f
done

如果您有空格或制表符,你可以使用发现的-exec选项。 您传递-exec command args ,把{}您想要的文件名被取代,并结束与一个参数; 。 你需要引用{}; 从而使外壳不作说明。

find . -name myFile -exec cp something "{}" \;

有时-exec是不够的。 例如,在这个问题 ,他们想用猛砸参数展开来计算的文件名。 为了做到这一点,你需要通过-exec bash -c 'your command' ,但随后你会遇到与报价问题{}替代。 为了解决这个问题,你可以使用-print0find到打印带有空字符(这是在文件名中无效)界定的结果,它管的while read循环,对空值分割参数:

find . -name myFile -print0 | (while read -d $'\0' f; do
    cp something "$f"
  done)


Answer 3:

管道将一个程序的输出发送到另一个的输入。 cp不从在所述终端的输入流中读取,它仅仅使用在命令行上的参数。

你想要么使用xargs与管或findexec的说法,而不是管道。



文章来源: Linux command output as a parameter of another command