[英]Rsync / Linux : prevent new directory being created inside destination directory
[英]How can I prevent a directory from being removed in rsync
我正在嘗試制作一個腳本,用於將我的主目錄和其他重要目錄備份到外部驅動器,同時排除某些目錄和文件類型( --exclude
)。 如果我將文件類型或目錄添加到排除列表( --delete-excluded
),則也需要在備份上刪除排除的文件。
另外,刪除的所有內容也都需要備份,以防萬一出現嚴重錯誤( --backup --backup-dir=rsync/backup
)。
我從這個開始:
#!/usr/bin/env bash
PATH_PWD="`pwd`"
PATH_HOME=~
SRC="/home/redsandro"
PATH_TARGET="/media/redsandro/MyBook 4TB/backup/`hostname`"
PATH_BIN="${SRC}/bin"
EXCL_FROM="${PATH_BIN}/rs-backup-external.sh.exclude.txt"
DATE="`date +%Y-%m-%d`"
OPTS="-ahl --update --del --delete-excluded --force --ignore-errors --progress --stats --exclude-from=$EXCL_FROM --log-file=~/rsync/rsync.$DATE.log"
OPTS="$OPTS --backup --backup-dir=rsync/backup/${DATE}"
#OPTS="$OPTS --dry-run"
echo Backing up $SRC to $PATH_TARGET...
echo
sudo rsync $OPTS "$SRC/" "${PATH_TARGET}${SRC}"
現在,很明顯,-- --del
與--backup --backup-dir=rsync/backup
沖突。 我可以排除此目錄嗎? 還是有更簡單的方法可以做到這一點?
我的目標是擁有一個可以在所有計算機上運行的腳本,其中一部分同步到計算機特定的目錄,而另一部分(文檔,圖片)同步到全局目錄,因為無論如何它們都必須相同。
Rsync是一個很棒的工具,但是有時很難使用。
問題是您正在使用--exclude-from
,它將全局排除規則設置為發送方和接收方。
在rsync對文件系統執行操作之前,它將首先組裝兩個文件列表,一個用於發送方(客戶端),另一個用於接收方(服務器)。 如果文件從兩面都排除在外,則rsync只會忽略它。 如果僅從發送方排除它並且在接收方存在它,則rsync會將其刪除。
在您的情況下,由於您的規則從兩側都排除了文件,因此rsync不會刪除它們。 然后,使用--delete-excluded
強制刪除。 但是,就像您說的那樣,此選項與--backup --backup-dir=rsync/backup
沖突。
我建議您執行以下操作。
$EXCL_FROM
轉換$EXCL_FROM
常規過濾器文件,即,在每行之前插入減號以使它們排除規則。 --exclude-from=$EXCL_FROM
和--delete-excluded
。 -FF
。 在調用rsync之前包括以下命令。
cp "$EXCL_FROM" "$SRC/.rsync-filter"
這樣,您的規則將僅適用於發送方,指定為排除規則的文件(如果找到)將從接收方刪除。 這不應與備份選項沖突。
更新資料
本質上, -FF
選項使傳輸的兩面都使rsync進程按目錄過濾文件名為.rysnc-filter
。 在您的情況下,它僅存在於發送方,因此其規則不適用於接收方。
實際上, -FF
等於-F -F
。 如我之前所說,第一個F
告訴rsync將.rsync-filter
中的規則合並到源目錄和目標目錄的根目錄中。 第二個F
告訴rsync排除它們。 您不希望傳輸.rsync-filter
,否則您的排除規則也將適用於接收方,並且您的原始問題將返回-排除的文件將停止刪除。
這是我的man (1) rsync
所說的:
-F same as --filter='dir-merge /.rsync-filter'
repeated: --filter='- .rsync-filter'
一種替代方法是使用絕對路徑(由../
指定)在備份文件夾之外找到--backup-dir
。
即。 --backup-dir="../rsync/backup/${DATE}"
這將在與目標文件夾相同的級別上創建一個新文件夾。 例如,如果您要導出到/home/user/rsync/backup
則上述命令會將已刪除的文件存儲在home/user/rsync/rsync/backup/${DATE}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.