清单S3使用Bash Script存储最新文件

时间:2016-09-15 08:34:23

标签: bash amazon-web-services amazon-s3

你是shell脚本世界的新手,我遇到了几个问题。我正在编写一个调用两个AWS S3 Buckets的bash脚本,并列出已上载的最新文件。 在“长跑”中,必须下载这两个文件,并使用CLI复制到RDS PostgreSQL数据库中的2个现有表。 到目前为止,这就是我所拥有的:

#!/bin/bash


printf "Looking up newest files added...\n";

AUTO= $(aws s3 ls bucketx --recursive | sort | tail -n 1| awk '{print $4}');
IMMO= $(aws s3 ls buckety --recursive | sort | tail -n 1 | awk '{print $4}');

echo AUTO;
echo IMMO;

问题是,当我直接在终端中执行AWS命令时,这是我无法获得的,并且顺利运行并且应该按照应有的方式行事。但是在脚本中,我收到以下错误:

Looking up newest files added...
./shellTest.sh: line 6: bucketx/14.9.2016.csv: No such file or directory
./shellTest.sh: line 7: buckety/14.9.2016.csv: No such file or directory

有人能告诉我我做错了什么吗?这是一个逻辑问题还是仅仅是一个问题。句法问题? 我期待着回声'命令只打印出变量x和y的内容,但没有打印任何内容..

干杯

1 个答案:

答案 0 :(得分:2)

您在AUTO中想要的是最新键的值,因此您需要一个字符串

AUTO="$(aws s3 ls bucketx --recursive | sort | tail -n 1| awk '{print $4}')"
IMMO="$(aws s3 ls buckety --recursive | sort | tail -n 1 | awk '{print $4}')"

所以AUTOIMMO将保存值(键的字符串值) - 如果省略引号,系统将尝试查找引用并将抱怨该文件不存在本地

要显示您需要的值

echo $AUTO
echo $IMMO

见下文

这个不起作用

$ AUTO= $(aws s3 ls <bucket> --recursive | sort | tail -n 1| awk '{print $4}');
-bash: database/instantclient-sdk-linux.x64-11.2.0.4.0.zip: No such file or directory

但是这个没问题

$ AUTO="$(aws s3 ls <bucket> --recursive | sort | tail -n 1| awk '{print $4}')"
$ echo $AUTO
database/instantclient-sdk-linux.x64-11.2.0.4.0.zip