在包含块的 S3 CP 命令中包含变量

在包含块的 S3 CP 命令中包含变量

我有一个场景,我想在 S3 cp 命令中包含一些文件名,但它一直失败。以下是我的命令:-

DATE=$(date '+%Y%m%d')
/usr/local/bin/aws s3 cp "/test/copy" "s3://test-bucket/test/copy/" --include "TEST_$DATE.REQHE" --include "TEST_$DATE.ERRMSG_REQHE" 

运行命令时出现以下错误:-

upload failed: ./ to s3://test-bucket/test/copy/ [Errno 21] Is a directory: '/test/copy'

有人可以帮我修改命令,使其可以工作吗?

手动命令的输出:-

[root@server:/home/linux]$ /usr/local/bin/aws s3 cp /test/copy/ s3://test-bucket/test/copy/ --include "TEST_20211220.REQHE" --profile aws-s3 --sse aws:kms --sse-kms-key-id ab457654f-6562-43df-124l-4et75653bq12
upload failed: ../../test/copy to s3://test-bucket/test/copy/ [Errno 21] Is a directory: '/test/copy/'
[root@server:/home/linux]$ /usr/local/bin/aws s3 cp "/test/copy/" "s3://test-bucket/test/copy/" --include "TEST_20211220.REQHE" --profile aws-s3 --sse aws:kms --sse-kms-key-id ab457654f-6562-43df-124l-4et75653bq12
upload failed: ./../test/copy to s3://test-bucket/test/copy/ [Errno 21] Is a directory: '/test/copy/'
[root@server:/home/linux]$ /usr/local/bin/aws s3 cp "/test/copy" "s3://test-bucket/test/copy/" --include "TEST_20211220.REQHE" --profile aws-s3 --sse aws:kms --sse-kms-key-id ab457654f-6562-43df-124l-4et75653bq12
upload failed: ./../test/copy to s3://test-bucket/test/copy/ [Errno 21] Is a directory: '/test/copy/'

提前致谢

答案1

您似乎认为添加变量是问题所在。让我们重复您的命令,但删除变量并替换为今天的日期(2021 年 12 月 20 日):

/usr/local/bin/aws s3 cp "/test/copy" "s3://test-bucket/test/copy/" --include "TEST_20211220.REQHE" --include "TEST_20211220.ERRMSG_REQHE"

该命令几乎肯定也会以同样的方式失败(事实上,在您确认这一点的评论中)。因此我们可以得出结论,变量的插值是无关的。

查看错误信息:

upload failed: […] [Errno 21] Is a directory: '/test/copy'

这告诉您该路径/test/copy是一个目录,并且 Amazonaws s3 cp命令不会复制目录。 (我并不完全清楚错误消息是指源还是目标。更改其中一个的名称可以解决这种歧义。)命名目录时带或不带尾部斜杠并不重要;都可以。它仍然是一个目录,该命令不会复制目录。

解决方案是不复制目录。据推测该aws s3 cp命令将复制文件,但我无权访问该命令来测试。

相关内容