安装了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"
我得到了这个错误"太多的论点"
最近我可以猜到它很疯狂我没有发送特定文件,但我不想这样做,我想自动化所有事情。
如果有人能够对我错过的内容有所了解,我会非常感激。
谢谢
答案 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)
我遇到了同样的情况。让我们分享两个我尝试检查相同代码的方案。
$aws s3 cp s3://bucket/directory/ /usr/home/folder/ --recursive --region us-east-1 --profile yaaagy
有效。
在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`""