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
我有一个 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