我正在尝试将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