Jos*_*h K 45 scripting bash xargs
假设我有一个包含以下内容的文件
bob
john
sue
Run Code Online (Sandbox Code Playgroud)
现在这些直接对应(在本例中)URL 模式,例如http://example.com/persons/bob.tar
, john.tar
, sue.tar
。
我想使用这些线路并运行它们xargs
。我不知道传递给正在执行的命令的内容是什么。我如何从提示符(比如我想简单地回显每一行cat file | xargs echo $PARAM
)或从 bash 脚本访问参数。
Ste*_*fan 81
迈克尔的回答是正确的,应该可以解决您的问题。跑步
cat file | xargs -I % curl http://example.com/persons/%.tar
Run Code Online (Sandbox Code Playgroud)
将按bob.tar
john.tar.
sue.tar
预期下载文件。
但是:这里的猫没用
而是使用:
<file xargs -I % curl http://example.com/persons/%.tar
Run Code Online (Sandbox Code Playgroud)
Mic*_*zek 18
我想您是在问如何xargs
在命令中间插入从' stdin拉出的单行,而不是始终将其粘贴到末尾。如果是,则-I
标志接受一个replacement-string
参数;xargs
然后将replacement-string
在命令中替换为从 stdin 读取的行:
$ cat file | xargs -I foobar curl http://example.com/foobar.tar
Run Code Online (Sandbox Code Playgroud)
小智 9
外壳循环的另一种方式:
for i in `cat file`; do curl -I http://foo.com/$i; done
Run Code Online (Sandbox Code Playgroud)
您还可以通过&
在最后一个分号之前附加在后台运行每个迭代- 对于非常大的下载,这可能很方便
使用 GNU Parallel,您可以:
cat urls | parallel curl {} ">" {/}
Run Code Online (Sandbox Code Playgroud)
或者:
cat persons | parallel curl http://example.com/persons/{}.tar ">" {}.tar
Run Code Online (Sandbox Code Playgroud)
观看 GNU Parallel 的介绍视频以了解更多信息:http : //www.youtube.com/watch?v=OpaiGYxkSuQ