【发布时间】:2020-03-04 08:17:24
【问题描述】:
我一直在使用 AWK 执行此命令,但它太慢了。
必须有一种更快的方法来处理来自aws s3 ls command 的此列表
s5cmd ls s3://bucket-name/* | awk -v AWS_BUCKET="bucket-name" '{cmd="aws s3api put-object-acl --access-control-policy file:///access_policy.json --bucket " AWS_BUCKET " --key "$5; system(cmd); print $5}'
这基本上列出了所有对象,然后对它们应用 ACL。
有什么想法吗?
【问题讨论】:
-
恕我直言,我不是
parallel命令(GNU 实用程序)方面的专家,但您可以通过并行启动命令来使用它,如果您也可以在这个问题中添加该标签你没问题。 -
为什么这可能会很慢,因为您将输出从一个命令传递到另一个命令,然后为前一个命令的每一行输出运行另一组命令是一个子 shell(因为您使用的是系统)
-
这就是它慢的原因,有什么替代方案吗?
-
我同意 Ravnider 的观点:我会删除 amazon-web-services(或其中一个)的标签并替换为 gnu-parallel,这样您就可以找到专门使用此工具的人看看你的 Q。这假设你的乘法任务不会相互干扰。祝你好运。
-
而且,这不是 awk 的错。除非您有一种可以并行运行/管理多个程序的编程语言,否则您将受到时间限制,依次执行每个程序,每个程序都等待前一个程序完成。 (你可能知道 ;-) )。您可以使用 GlennJackmans 的想法,但在每个 cmd 字符串的末尾添加一个
&,然后所有将在后台并行运行,但不会很好地管理。祝你好运。
标签: bash amazon-s3 awk aws-cli gnu-parallel