1

我希望获取我的 S3 存储桶上大于 200 KB 的所有文件。经过一些研究,我能够使用以下命令递归地生成我的 S3 存储桶中大于 200 KB 的所有文件的列表:

s3cmd ls -r s3://mybucket | awk '{if ($3 > 200000) print $4}' > files.txt

理想情况下,我不仅希望找到所有大于 200KB 的文件,而且还希望在同一命令中获取它们,而不是仅仅生成一个列表。

我正在寻找这样的东西,但它显然不正确。

s3cmd ls -r s3://mybucket | awk '{if ($3 > 200000) "s3cmd get $4" }'

供参考:如果您不熟悉 s3cmd:$3 返回文件大小,$4 返回 s3cmd 返回的特定文件的文件名。

提前感谢您的帮助。

问题:

如何使用 awk 在另一个 bash 命令中调用另一个 bash 命令?

4

3 回答 3

2
s3cmd ls -r s3://mybucket | awk '$3 > 200000 {print $4}' | xargs s3cmd get
于 2014-07-21T16:48:20.893 回答
2

当使用从文本文件中获取的参数执行二进制文件时,bash会更好,因为扩展包含空格作为参数的变量是安全的。

while read -ra A; do
    [[ ${A[2]} -gt 200000 ]] && s3cmd get "${A[3]}"
done < <(s3cmd ls -r s3://mybucket)
于 2014-07-21T17:00:54.420 回答
1

您可以system在中使用函数awk

s3cmd ls -r s3://mybucket | awk '($3 > 200000) { system("s3cmd get " $4); }'
于 2014-07-21T16:45:07.120 回答