Windows中的AWS Cli不会将文件上传到s3存储桶

时间:2015-12-30 19:31:16

标签: amazon-web-services amazon-s3 aws-cli

安装了python 2.7.10的Windows服务器12r2和aws cli工具。以下作品:

aws s3 cp c:\a\a.txt s3://path/

我可以毫无问题地上传该文件。我想要做的是将文件从映射驱动器上传到s3存储桶,所以我尝试了这个:

aws s3 cp s:\path\file s3://path/

它有效。

现在我想要做的事情是无法弄清楚如何不指定,但让它抓住所有文件,这样我就可以安排将目录内容上传到我的s3存储桶。我试过这个:

aws s3 cp "s:\path\..\..\" s3://path/ --recursive --include "201512"

我得到了这个错误"太多的论点"

最近我可以猜到它很疯狂我没有发送特定文件,但我不想这样做,我想自动化所有事情。

如果有人能够对我错过的内容有所了解,我会非常感激。

谢谢

6 个答案:

答案 0 :(得分:3)

或者你可以尝试'mc',因为单个二进制文件可用于64位和32位的Windows。 'mc'实现镜像,cp,可恢复会话,json可解析输出等 - https://github.com/minio/mc

答案 1 :(得分:2)

  

aws s3 cp "s:\path\..\..\" s3://path/ --recursive --include "201512"   太少的论点

这是因为,在您的命令中,双引号(")使用反斜杠(\)进行转义,因此无法正确解析本地路径(s:\path\..\..\)。

您需要做的是使用双反斜杠转义反斜杠,即:

aws s3 cp "s:\\path\\..\\..\\" s3://path/ --recursive --include "201512"

答案 2 :(得分:1)

如果这对跟随我的其他人有用,请在源和目标之间添加一些额外的空格。我一直不愿意使用单引号,双引号,斜杠等的每种组合来运行此命令:

aws s3 cp /home/<username>/folder/ s3://<bucketID>/<username>/archive/ --recursive --exclude "*" --include "*.csv"

它会给我:“ aws:错误:参数太少”。单。办法。我尝试过。

所以最终在aws s3 cp help中看到了--debug选项 因此以这种方式再次运行:

aws s3 cp /home/<username>/folder/ s3://<bucketID>/<username>/archive/ --recursive --exclude "*" --include "*.csv" --debug

这是相关的调试行:

MainThread - awscli.clidriver - DEBUG - Arguments entered to CLI: ['s3', 'cp', 'home/<username>/folder\xc2\xa0s3://<bucketID>/<username>/archive/', '--recursive', '--exclude', '*', '--include', '*.csv', '--debug']

我不知道\xc2\xa0来自源和目标之间的哪里,但是确实有!更新了该行以添加几个额外的空格,现在它可以正常运行了:

aws s3 cp /home/<username>/folder/   s3://<bucketID>/<username>/archive/ --recursive --exclude "*" --include "*.csv" 

答案 3 :(得分:0)

使用aws s3 sync代替aws s3 cp复制目录的内容。

答案 4 :(得分:0)

我遇到了同样的情况。让我们分享两个我尝试检查相同代码的方案。

  1. 在bash内 请确保您已拥有AWS配置文件(使用$ aws configure)。另外,请确保使用适当的代理(如果适用)。

$aws s3 cp s3://bucket/directory/ /usr/home/folder/ --recursive --region us-east-1 --profile yaaagy

有效。

  1. 在perl脚本中

    $cmd="$aws s3 cp s3://bucket/directory/ /usr/home/folder/ --recursive --region us-east-1 --profile yaaagy"

我将其括在“”中,并且成功。让我知道这是否对您有用。

答案 5 :(得分:0)

我最近遇到了同样的问题,quiver's answer(用双反斜杠替换单个反斜杠)解决了我遇到的问题。

这是我使用OP的原始示例解决该问题的Powershell代码:

# Notice how my path string contains a mixture of single- and double-backslashes
$folderPath = "c:\\a\a.txt"
echo "`$folderPath = $($folderPath)"

# Use the "Resolve-Path" cmdlet to generate a consistent path string.
$osFolderPath = (Resolve-Path $folderPath).Path
echo "`$osFolderPath = $($osFolderPath)"

# Escape backslashes in the path string.
$s3TargetPath = ($osFolderPath -replace '\\', "\\")
echo "`$s3TargetPath = $($s3TargetPath)"

# Now pass the escaped string to your AWS CLI command.
echo "AWS Command = aws s3 cp `"s3://path/`" `"$s3TargetPath`""