将AWS CLI输出重定向到AWK,以保持操作的时间戳日志



我正在尝试将AWS CLI命令(从S3桶中检索文件(重定向到AWK中,该输出将带有时间戳将输出前缀为前缀,然后将其写入文件中 - 有效提供记录机制。

一般的Stdout输出看起来像这样:

download: s3://mbd-wombats/IMG_0210.jpg to aws/IMG_0210.jpg         5 file(s) remaining
download: s3://mbd-wombats/IMG_0209.jpg to aws/IMG_0209.jpg     4 file(s) remaining
download: s3://mbd-wombats/IMG_0207.jpg to aws/IMG_0207.jpg      3 file(s) remaining
download: s3://mbd-wombats/IMG_0208.jpg to aws/IMG_0208.jpg      2 file(s) remaining
download: s3://mbd-wombats/IMG_0206.jpg to aws/IMG_0206.jpg       1 file(s) remaining

我试图使用的命令是:

aws s3 cp --recursive s3://mbd-wombats /home/martyn/aws >> >(awk '{print strftime("%Y-%m-%d:%H:%M:%S ") $0}' > /home/martyn/wibble.txt)

不幸的是,它只是将其写入与Stdout相同的文件。而以下内容:

echo -e 'onentwonthree' &>> >(awk '{print strftime("%Y-%m-%d:%H:%M:%S ") $0}' > test.log)

作品:

2018-04-04:14:23:12 one 2018-04-04:14:23:12 two 2018-04-04:14:23:12 three

我的问题是 - 为什么AWS的输出不正确地解析?

任何帮助都非常感谢。预先感谢。

事实证明,AWS的CLI吐出的返回而不是newlines,因此在将所有内容扔入所有内容之前,都是扔进tr" r" n" r" n"的情况尴尬,例如

aws s3 cp --recursive s3://mbd-wombats /home/martyn/aws | tr "r" "n" > >(awk '{print strftime("%Y-%m-%d:%H:%M:%S ") $0}' >> /home/martyn/s3-sync.log)

不确定在stdout或stderr中报告了进度。但是,使用bash-4,您可以轻松地管道和stderr

$ aws ...  |& awk '{print strftime("%Y-%m-%d:%H:%M:%S"), $0}' > log

最新更新