运行并行命令并将输出重定向到具有特定名称的文件

运行并行命令并将输出重定向到具有特定名称的文件

我不太明白并行命令是如何工作的。

我需要运行这个简单的命令:(100 次)

curl https://jsonplaceholder.typicode.com/todos/1
curl https://jsonplaceholder.typicode.com/todos/2
curl https://jsonplaceholder.typicode.com/todos/3
...
curl https://jsonplaceholder.typicode.com/todos/100

end 将输出重定向到具有如下名称的文件:

1.txt
2.txt
3.txt
....
100.txt

答案1

像这样:

parallel curl https://jsonplaceholder.typicode.com/todos/{} ">" {}.txt ::: {1..100}

考虑花 20 分钟阅读《GNU Parallel 2018》一书的第 1+2 章(印刷版:http://www.lulu.com/shop/ole-tange/gnu-parallel-2018/paperback/product-23558902.html在线的:https://doi.org/10.5281/zenodo.1146014)。您的命令行会因此而喜欢您。

答案2

嗯,这是一个有点过度设计的 Bash 解决方案,但它有效,并且希望澄清该命令的使用parallel

function xx(){ curl "https://jsonplaceholder.typicode.com/todos/$1" > "$1.txt";}
parallel xx -- {1..100}

第一行创建一个新的“命令”或调用的函数,xx执行时会导致执行将其 stdout 重定向到文件的curl 命令。该xx函数采用单个数字作为其参数;在函数体内,它被称为“$1”,即第一个位置参数。

第二行演示了该命令的用法parallel,该命令对列表 1, 2, 3, ..., 100 中的每个参数运行xx一次(列表 1 2 3 ... 100 由 shell 在以下情况下生成):它对{1..100}) 执行大括号扩展。

parallel注意:这个答案与 Debian 系统上的包中的命令有关moreutils,而不是命令GNU parallel

相关内容