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/

我已在排除文件中添加了此底線

+ /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 和 excex_file。您可以這樣做,但事實上,如果您以顯式的“+”或“-”開頭檔案中的每一行,它會覆蓋預設包含或排除方面。因此,您可以將所有內容放入一個文件中,前提是您為這些行添加了前綴。

相關內容