使用If / Else和awk调用bash命令

时间:2014-07-21 16:42:12

标签: bash shell command-line awk s3cmd

我希望获取大于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命令?

3 个答案:

答案 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); }'