我正在尝试在我的 EC2 实例上使用“aws s3 同步”。“--exclude”选项是否已损坏?

use*_*845 8 linux amazon-s3 amazon-web-services aws-cli

我正在尝试使用 EC2 实例上预装的 Amazon 官方工具将我的 EC2 实例备份到 S3。我很难获得同步命令以从同步中排除目录。该文档使使用“--exclude”选项听起来很容易。但是,我一直无法让它工作。

我正在运行 yum 提供的最新版本:

[root@HOSTNAME ~]# aws --version
aws-cli/1.1.1 Python/2.6.8 Linux/3.4.57-48.42.amzn1.x86_64
Run Code Online (Sandbox Code Playgroud)

这是我遇到问题的命令:

aws s3 sync /var/www s3://backup-bucket/var/www/ --exclude '*.git/*'
Run Code Online (Sandbox Code Playgroud)

我想从同步中排除所有名为“.git”的文件夹以及这些文件夹中的所有文件。

文档来看,我给 '--exclude' 的模式应该有效。但是,整个 .git 目录及其所有文件仍会同步。这是输出的示例行:

upload: ../var/www/site/.git/objects/7b/e3cdf203d34a0d7eff30a96a78d20eacee8d77 to s3://backup-bucket/var/www/site/.git/objects/7b/e3cdf203d34a0d7eff30a96a78d20eacee8d77
Run Code Online (Sandbox Code Playgroud)

我尝试了以下命令,但都未能排除名为“.git”的文件夹:

aws s3 sync /var/www s3://backup-bucket/var/www/ --exclude *.git/*
aws s3 sync /var/www s3://backup-bucket/var/www/ --exclude */.git/*
aws s3 sync /var/www s3://backup-bucket/var/www/ --exclude '.git'
aws s3 sync /var/www s3://backup-bucket/var/www/ --exclude '*\.git/*'
aws s3 sync /var/www s3://backup-bucket/var/www/ --exclude '.*\.git/.*'
Run Code Online (Sandbox Code Playgroud)

而且,也许最令人不安的是,此命令不排除任何同步:

aws s3 sync /var/www s3://backup-bucket/var/www/ --exclude '*'
Run Code Online (Sandbox Code Playgroud)

实际上,似乎“--exclude”仅在通配符位于绝对路径的右侧时才有效。例如,这不包括 /var/www/site/.git 中的 .git 文件夹:

aws s3 sync /var/www s3://backup-bucket/var/www/ --exclude '/var/www/site/.git/*'
Run Code Online (Sandbox Code Playgroud)

但这并不排除任何事情:

aws s3 sync /var/www s3://backup-bucket/var/www/ --exclude '*/www/site/.git/*'
Run Code Online (Sandbox Code Playgroud)

我在 /var/www 中有很多站点,还有很多我想从同步中排除的文件夹,例如“.git”、“已解析”、“缓存”等。必须为所有这些站点提供绝对路径会很糟糕.

我希望我在这里做错了一些简单的事情。谢谢大家的帮助。

小智 6

提到的github 问题已关闭,同步命令确实允许 exclude now

我已经尝试并添加了--exclude ".git/*"作品。

请注意,结尾/*是必需的。


小智 4

它对我来说也很糟糕 - 并且这个https://github.com/aws/aws-cli/issues/434已经有一个未解决的问题。这是一个错误。