gpt4 book ai didi

gnu-parallel - GNU 并行参数

转载 作者:行者123 更新时间:2023-12-04 01:44:09 30 4
gpt4 key购买 nike

从例子

seq 1 100 | parallel -I @@ \ > 'mkdir top-@@;seq 1 100 | parallel -X mkdir top-@@/sub-{}

怎么办 -X , @@, {}工作?此外,'1' 或 '.' 时的行为是什么?在 {} 内传递?/> 用于重定向吗?

我试图通过 https://www.youtube.com/watch?v=P40akGWJ_gY&list=PL284C9FF2488BC6D1&index=2 的教程并通过 man 并行页面阅读。我能够收集一些基本知识,但不知道如何使用它等。

最佳答案

让我们先做简单的事情。

反斜杠 (\)只是告诉 shell 下一行是当前行的延续,大于号( > )是 shell 提示输入延续行。这与键入没有什么不同:

echo \
hi

你会真正看到这个:
echo \
> hi
hi

所以,我是说你可以忽略 \>只需在一行上运行命令。

接下来, {}中的事情.这些在 中有所描述。 GNU 并行 手册页,但本质上:
  • {1}指的是第一个参数
  • {2}指的是第二个参数,依此类推

  • 使用以下内容进行测试,其中列分隔符设置为空格,但我们以相反的顺序使用参数:
    echo A B | parallel --colsep ' ' echo {2} {1}
    B A

  • {.}指一个参数,通常是一个文件名,去掉其扩展名

  • 测试这个:
    echo fred.dat | parallel echo {.}
    fred

    现在让我们来解决实际问题,如上所述删除了续行,并将所有内容放在一行中:
    seq 1 100 | parallel -I @@ 'mkdir top-@@;seq 1 100 | parallel -X mkdir top-@@/sub-{}'

    所以,这基本上是在运行:
    seq 1 100 | parallel -I @@ 'ANOTHER COMMAND'

    奥莱已用 @@代替 {}在此命令中,以便在第二个内部并行命令中使用的替换不会相互混淆。所以,你看到的地方 @@你只需要用第一个 seq 1 100 中的值替换它.

    第二个并行命令与第一个几乎相同,但这里 Ole 使用了 X .如果您观看链接到的视频,您会看到他之前向您展示了它是如何工作的。它实际上根据系统的 ARGMAX 将“尽可能多的参数”传递给命令。 .所以,如果你想创建 10,000 个目录,而不是这样:
    seq 1 10000 | parallel mkdir {}

    这将启动 10,000 个单独的进程,每个进程都运行 mkdir ,您将开始一个 mkdir但有 10,000 个参数:
    seq 1 10000 | parallel -X mkdir

    这避免了创建 10,000 个独立进程的需要并加快了速度。

    现在让我们看看外部 parallel调用并进行试运行以查看它会做什么,而无需实际执行任何操作:
    seq 1 100 | parallel -k --dry-run -I @@ 'mkdir top-@@;seq 1 100 | parallel -X mkdir top-@@/sub-{}'

    输出
    mkdir top-1;seq 1 100 | parallel -X mkdir top-1/sub-{}
    mkdir top-2;seq 1 100 | parallel -X mkdir top-2/sub-{}
    mkdir top-3;seq 1 100 | parallel -X mkdir top-3/sub-{}
    mkdir top-4;seq 1 100 | parallel -X mkdir top-4/sub-{}
    mkdir top-5;seq 1 100 | parallel -X mkdir top-5/sub-{}
    mkdir top-6;seq 1 100 | parallel -X mkdir top-6/sub-{}
    mkdir top-7;seq 1 100 | parallel -X mkdir top-7/sub-{}
    mkdir top-8;seq 1 100 | parallel -X mkdir top-8/sub-{}
    ...
    ...
    mkdir top-99;seq 1 100 | parallel -X mkdir top-99/sub-{}
    mkdir top-100;seq 1 100 | parallel -X mkdir top-100/sub-{}

    所以,现在您可以看到它将启动 100 个进程,每个进程将创建一个目录,然后启动 100 个进一步的进程,每个进程将创建 100 个子目录。

    关于gnu-parallel - GNU 并行参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56000665/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com