我一直在尝试使用AWS CLI从AWS的子文件夹下载所有文件,但是,在下载了头几个文件后,它无法下载其余文件。我相信这是因为它在文件名中添加了扩展名,然后将其视为无效的文件路径。
我正在使用以下命令;
aws s3 cp s3://my_bucket/sub_folder /tmp/ --recursive
对于子文件夹中的几乎所有文件,它给我以下错误;
[Errno 22] Invalid argument: 'C:\\tmp\\2019-08-15T16:15:02.tif.deDBF2C2
我认为这是由于.deDBF2C2扩展名所致,尽管我不知道为什么这样做,但似乎在下载时已将其添加到文件中。在实际存储区中,文件名都以.tif结尾。
有人知道是什么原因吗?
更新:从Linux计算机执行该命令后,该命令即可工作。似乎特定于Windows。
答案 0 :(得分:0)
我从树莓派尝试过,它奏效了。似乎只是Windows操作系统的问题。
答案 1 :(得分:0)
这是AWS的监督,在日志文件名称中使用Windows保留字符!执行命令时,它将创建所有目录,但是名称中带有::
的所有日志均无法下载。
此处讨论了问题:https://github.com/aws/aws-cli/issues/4543
非常沮丧,我想出了一种解决方法,方法是执行“ DryRun”,该命令打印预期的日志输出并将其移植到文本文件,例如:
>aws s3 cp s3://config-bucket-7XXXXXXXXXXX3 c:\temp --recursive --dryrun > c:\temp\aScriptToDownloadFilesAndReplaceNames.txt
输出文件中包含以下这些 aws日志条目,我们可以将其转换为aws脚本命令:
(dryrun)下载:s3:// config-bucket-7XXXXXXXXXXX3 / AWSLogs / 7XXXXXXXXXXX3 / Config / ap-southeast-2 / 2019/10/1 / ConfigHistory / 7XXXXXXXXXXX3_Config_ap-southeast-2_ConfigHistory_AWS :: RDS :: DBInstance_20191001T103223Z_100_1。 json.gz 至 \ AWSLogs \ 7XXXXXXXXXXX3 \ Config \ ap-southeast-2 \ 2019 \ 10 \ 1 \ ConfigHistory \ 703014955993_Config_ap-southeast-2_ConfigHistory_AWS :: RDS :: DBInstance_20191001T103223Z_p1001001T103223Z_1.json。 >
在Notepad ++或其他文本编辑器中,您将(dryrun)下载文件替换为 aws s3 cp
然后您将在命令中看到以下几行:aws s3 cp,Bucket文件和本地文件路径。我们需要删除至:
右侧的本地文件路径中的 ::aws s3 cp s3://config-bucket-7XXXXXXXXXXX3/AWSLogs/7XXXXXXXXXXX3/Config/ap-southeast-2/2019/10/1/ConfigHistory/7XXXXXXXXXXX3_Config_ap-southeast-2_ConfigHistory_AWS::RDS::DBInstance_20191001T103223Z_20191001T103223Z_1.json.gz to AWSLogs\7XXXXXXXXXXX3\Config\ap-southeast-2\2019\10\1\ConfigHistory\7XXXXXXXXXXX3_Config_ap-southeast-2_ConfigHistory_AWS::RDS::DBInstance_20191001T103223Z_20191001T103223Z_1.json.gz
我们只能在本地路径中用-替换 :: ,而不能使用正则表达式(.*)::
删除S3存储桶路径中最后一次出现的字符每行的结尾:
在这里我们可以看到我通过单击两次“全部替换”将连字符{:{1}}替换为:::
下一步,删除至(忽略图像中的光标图标,至不应替换为任何内容)
最后选择复制/粘贴到命令提示符中的所有行,以下载所有带有保留文件字符的文件!