我一直在试图找出如何备份文件服务器(CentOS via smb)用户文件夹的内容,忽略某些文件类型和目录。看起来这应该很简单,但我无法弄清楚如何忽略多个目录。
我想忽略以下内容:
.
或_
~$*
).lock
)我尝试了--exclude
标志的一系列不同组合,但无法正常工作。
这是最有意义的命令,但它不排除任何东西:
s3cmd sync --dry-run --verbose --delete-removed --exclude '.*' '_*' '~$*' '*.lock' /home/user-folder s3://bucket-name/
答案 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>
使用regex:
您还可以将所有模式打包成正则表达式,并使用--rexclude
选项传递它:
上述问题的正则表达式模式:".^\.*|._*|.~$*|.*.lock"
s3cmd sync --dry-run --verbose --delete-removed --rexclude ".^\.*|._*|.~$*|.*.lock" /home/user-folder s3://bucket-name/