繁体   English   中英

用If / Else和awk调用bash命令

[英]Calling bash command with If/Else and awk

我正在寻找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命令?

s3cmd ls -r s3://mybucket | awk '$3 > 200000 {print $4}' | xargs s3cmd get

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

while read -ra A; do
    [[ ${A[2]} -gt 200000 ]] && s3cmd get "${A[3]}"
done < <(s3cmd ls -r s3://mybucket)

您可以在awk使用system功能:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM