Rsnapshot --exclude-from 文件不适用于子目录

Rsnapshot --exclude-from 文件不适用于子目录

我正在进行远程备份。这是我的 rsnapshot 配置。

config_version  1.2
snapshot_root   /data/sbackup/
cmd_cp  /bin/cp
cmd_rm  /bin/rm
cmd_rsync       /usr/bin/rsync
cmd_ssh /usr/bin/ssh
cmd_logger      /usr/bin/logger
interval        alpha   2
interval        beta    2
interval        gamma   2
interval        delta   1
ssh_args    -p xxxx
verbose         3
loglevel        4
logfile /var/log/rsnapshot/
exclude_file    /data/xxxxx.exclude
rsync_long_args --stats --delete --numeric-ids --relative   --delete-excluded
lockfile        /var/run/rsnapshot.pid
backup  [email protected]:/ xxxxx-server/

我在 exclude_file 中添加了此底线

+ /root
+ /backups/mysqldb/latest
+ /etc/automysqlbackup
+ /etc/imscp
+ /etc/postfix
+ /etc/fail2ban
+ /etc/dovecot
+ /etc/apache2
+ /etc/ssh
+ /etc/ssl
+ /etc/php5
+ /etc/cron.d
+ /usr
+ /var/mail
+ /var/www
+ /var/log
- /var/cache
- /boot
- /home
- /opt
- /etc
- /*

但执行 rsync 后,我只获取了完整root目录usr。没有下载其他提及的+路径文件/子目录。

我希望+目录被包含而-不是被包含。

我做错了什么?

答案1

语法很难,但一旦你掌握了它,并非不可能,诀窍在于意识到你必须相对于 rsync/rsnapshot 工作目录的根目录逐个列出要匹配的目录:

假设你只想包含 /var/log 目录而不包含其他内容

+ /var  # we want the var directory
+ /var/log # we want the var/log directory
- /var/* # we dont want anything else in the var directory
- /* # we don't want anything else at all

希望你能看到它,首先我们在 /var 上匹配,然后在 /var/log 上匹配,然后在 /var/* 上匹配,然后在 /* 上匹配。

这行不通

+ /var/log
- /*

因为 /var/log 不会生成匹配,奇怪的是......

在您的示例中,您的第一个

+ /backups/mysqldb/latest

永远不会创建匹配..出于同样的原因!

答案2

您的排除模式似乎/*意味着任何类似的路径/etc/something都将被排除,除非您明确包含/etc然后排除那些您不想要的路径/etc/*

因此添加+ /etc- /etc/*,并且对于/var/backups和也类似/backups/mysqldb

顺便说一句,我之前说过你需要 2 个文件,一个单独的 include_file 和一个 exclude_file。你可以这样做,但事实上,如果你在文件中的每一行都以明确的“+”或“-”开头,它会覆盖默认包括或排除方面。因此,您可以将所有内容放在一个文件中,只要您像之前一样为行添加前缀即可。

相关内容