我一直在使用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。
有什么想法吗?
答案 0 :(得分:4)
对我来说,答案是两个答案的组合
s5cmd ls s3://bucket-name/* |
awk -v AWS_BUCKET="bucket-name" '{
printf "aws s3api put-object-acl --access-control-policy file:///access_policy.json --bucket %s --key %s\n", AWS_BUCKET, $5
}' |
parallel -j 32
这大大加快了该命令的执行速度,谢谢Glenn Jackman和Mark Setchell
答案 1 :(得分:3)
您可能希望只打印所有命令,然后将输出通过管道输送到system(cmd)
中以执行它们,而不是对每一行都进行sh
。
s5cmd ls s3://bucket-name/* |
awk -v AWS_BUCKET="bucket-name" -v '{
printf "aws s3api put-object-acl --access-control-policy file:///access_policy.json --bucket %s --key %s\n", AWS_BUCKET, $5
}' |
sh
您那里有流浪-v
。我认为这是一个错字,或者您删除了一些敏感内容。