xargs 用于多个参数,每个参数有两个输入

xargs for multiple arguments, each with two inputs

我有一个 script.sh 只是一个 wget:

wget https://stuff///etc

基本上我需要,每次脚本是 运行,输入两个参数 $1 和 $2,我需要多次这样做(我有数百个文件要下载,遵循这种类型路径)。

我很熟悉如何使用 xargs 读取 .txt 文件并将每一行输入到参数中,但我不确定当每一行有 2 个输入时如何执行此操作。

调用脚本

默认情况下 xargs 将尽可能多的参数填充到每个命令中。这些参数是在同一行还是不同行无关。

您可以使用 -n

限制每个命令的参数数量
xargs -n 2 yourWgetScript.sh < yourFile

或者,如果文件在一行中列出每个调用的参数,您可以指示 xargs 每行执行一个新命令而不是每两个参数

xargs -L 1 yourWgetScript.sh < yourFile

如果您的文件格式为

cmd1-arg1 cmd1-arg2
cmd2-arg1 cmd2-arg2
cmd3-arg1 cmd3-arg2
...

并且没有尾随空格、特殊符号等,那么这两个命令是等价的。但请记住 xargs 有其自己的转义机制。如果一些参数包含空格或 \"' 你必须使用 \.

转义它们

更高效的替代方案

使用以下脚本代替 xargs yourWgetScript 可能会更快,因为后者会重复启动 shell 一个 wget 进程对于 each URL 这可能非常慢。

awk '{print "https://stuff/"  "/"  "/etc"}' yourFile | xargs wget