如何使用s3cmd进行备份,忽略多个目录和文件类型

时间:2013-09-23 15:26:41

标签: s3cmd

我一直在试图找出如何备份文件服务器(CentOS via smb)用户文件夹的内容,忽略某些文件类型和目录。看起来这应该很简单,但我无法弄清楚如何忽略多个目录。

我想忽略以下内容:

  • ._
  • 开头的所有文件和目录
  • 所有MS Office临时文件(例如~$*
  • 锁定文件(例如.lock

我尝试了--exclude标志的一系列不同组合,但无法正常工作。

这是最有意义的命令,但它不排除任何东西:

s3cmd sync --dry-run --verbose --delete-removed --exclude '.*' '_*' '~$*' '*.lock' /home/user-folder s3://bucket-name/

3 个答案:

答案 0 :(得分:10)

如果您已经在使用.gitignore,则可以执行类似

的操作
s3cmd sync --exclude '.git/*' --exclude-from .gitignore <local_dir> s3://<bucket>/

this blog post中所述,并由official docs--exclude-from文档确认(Ctrl + F并搜索“exclude-from”)。

效果很好,但有一个小缺点:如果您要排除.gitignore中的文件夹,则必须排除其内容,或s3cmd将获取其内容。但是,这很简单,您只需在<foldername>/*中添加.gitignore之类的行,一切都会正常。


修改

嗯,比这更好。设置.s3ignore文件,只需从sync命令中引用它:

s3cmd sync --exclude-from .s3ignore <local_dir> s3://<bucket>/

.s3ignore示例:

.git
.git/*
.gitignore
node_modules
node_modules/*
*.swo
*.swp
*.pyo
*.pyc

答案 1 :(得分:1)

我做了类似的事情。关键是在每个要匹配的模式之前使用--exclude:

s3cmd -v --recursive --exclude ".ts" --exclude ".aac" --exclude "/thumbnails" put /var/www/folder s3://bucket/

此外,我设法使用没有通配符符号的.ts,它在我的情况下工作!

答案 2 :(得分:0)

其他答案提到为每个模式传递--exclude <pattern>,并将所有模式打包到文件中以传递--exclude-from <file>

使用

您还可以将所有模式打包成正则表达式,并使用--rexclude选项传递它:

上述问题的正则表达式模式:".^\.*|._*|.~$*|.*.lock"

s3cmd sync --dry-run --verbose --delete-removed --rexclude ".^\.*|._*|.~$*|.*.lock" /home/user-folder s3://bucket-name/