我希望获取大于200 KB的S3存储桶上的所有文件。经过一些研究,我能够使用以下命令以递归方式生成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命令?
答案 0 :(得分:2)
s3cmd ls -r s3://mybucket | awk '$3 > 200000 {print $4}' | xargs s3cmd get
答案 1 :(得分:2)
当使用从文本文件中获取的参数执行二进制文件时,bash
会更好,因为扩展包含空格作为参数的变量是安全的。
while read -ra A; do
[[ ${A[2]} -gt 200000 ]] && s3cmd get "${A[3]}"
done < <(s3cmd ls -r s3://mybucket)
答案 2 :(得分:1)
您可以在system
中使用awk
功能:
s3cmd ls -r s3://mybucket | awk '($3 > 200000) { system("s3cmd get " $4); }'