Linux命令输出为另一个命令的参数
我想将命令元素的输出列表作为另一个命令的参数传递。我找到了一些其他页面:Linux命令输出为另一个命令的参数,linux,parameters,command,pipe,Linux,Parameters,Command,Pipe,我想将命令元素的输出列表作为另一个命令的参数传递。我找到了一些其他页面: 但它们似乎更为复杂 我只想将一个文件复制到调用Linuxfind命令的每个结果中 这里怎么了 find . -name myFile 2>&1 | cp /home/myuser/myFile $1 谢谢管道将一个程序的输出发送到另一个程序的输入cp不在终端读取其输入流,它只使用命令行上的参数 您希望对管道使用xargs,或者使用find的exec参数而不是管道 find . -name myFil
find
命令的每个结果中
这里怎么了
find . -name myFile 2>&1 | cp /home/myuser/myFile $1
谢谢管道将一个程序的输出发送到另一个程序的输入
cp
不在终端读取其输入流,它只使用命令行上的参数
您希望对管道使用xargs
,或者使用find
的exec
参数而不是管道
find . -name myFile 2>&1 | xargs -I {} cp /home/myuser/myFile {}
注意:选项-I{}
将{}
定义为占位符,如果它与要执行的命令冲突,您也可以使用其他占位符。这是您想要的:
find . -name myFile -exec cp /home/myuser/myFile {} ';'
这方面的细分/解释:
:调用find命令find
:从当前工作目录开始搜索- 由于未指定深度标志,因此将递归搜索所有子文件夹
:查找具有显式名称的文件-name myFile
myFile
:对于搜索结果,使用它们执行其他命令-exec
:复制cp/home/myuser/myFile{}
以覆盖/home/myuser/myFile
返回的每个结果;把find
想象成每个搜索结果的去向{}
“;”代码>:用于分隔在
find
$(command)
执行一个命令,并将结果替换为另一个命令的参数。shell将在空格、制表符或换行符上拆分结果,并将for
的每个值依次分配给$f
,并对每个值运行命令
for f in $(find . -name myFile)
do
cp something $f
done
如果您有空格或制表符,可以使用find的-exec
选项。传递-exec命令args
,将{}
放在要替换文件名的位置,并以结束参数代码>。您需要引用{}
和代码>以便shell不会解释它们
find . -name myFile -exec cp something "{}" \;
有时-exec
是不够的。例如,在中,他们希望使用Bash参数扩展来计算文件名。为了做到这一点,您需要传递-exec bash-c'your command'
,但随后您将在{}
替换中遇到引用问题。要解决此问题,您可以使用-print0
fromfind
打印以空字符分隔的结果(在文件名中无效),并在读取时将其传送到拆分空参数的循环:
find . -name myFile -print0 | (while read -d $'\0' f; do
cp something "$f"
done)
你能举个例子吗?非常感谢。只需将{}的顺序更改为第二个位置,在/home/myuser/myFile之后,它就可以工作了。谢谢。@LuisAndrésGarcía,啊,我可能误解了你-你想复制一个文件/home/myuser/myFile
,以覆盖cwd中find
找到的任何myFile
?你说得对!)另一个例子,列出任何找到的文件的属性是:find-exec ls-l{}';'