我正在尝试使用预装在 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
这是我遇到问题的命令:
aws s3 sync /var/www s3://backup-bucket/var/www/ --exclude '*.git/*'
我想从同步中排除所有名为“.git”的文件夹以及这些文件夹中的所有文件。
从文档我为“--exclude”指定的模式应该有效。但是,整个 .git 目录及其所有文件仍会同步。以下是输出示例行:
upload: ../var/www/site/.git/objects/7b/e3cdf203d34a0d7eff30a96a78d20eacee8d77 to s3://backup-bucket/var/www/site/.git/objects/7b/e3cdf203d34a0d7eff30a96a78d20eacee8d77
我尝试了以下命令,但都无法排除名为“.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/.*'
而且,也许最令人不安的是,此命令不会排除同步中的任何内容:
aws s3 sync /var/www s3://backup-bucket/var/www/ --exclude '*'
事实上,似乎只有当通配符位于绝对路径的右侧时,“--exclude”才有效。例如,这将排除 /var/www/site/.git 处的 .git 文件夹:
aws s3 sync /var/www s3://backup-bucket/var/www/ --exclude '/var/www/site/.git/*'
但这并不排除任何事情:
aws s3 sync /var/www s3://backup-bucket/var/www/ --exclude '*/www/site/.git/*'
我在 /var/www 中有许多站点,还有许多我想从同步中排除的文件夹,例如“.git”、“parsed”、“cache”等等。如果必须为所有这些站点提供绝对路径,那就太糟糕了。
我希望我在这里做错了一些简单的事情。谢谢大家的帮助。
答案1
答案2
对我来说它也坏了 - 而且已经有一个未解决的问题https://github.com/aws/aws-cli/issues/434。这是一个 Bug。