gpt4 book ai didi

linux - 如何防止在 rsync 中删除目录

转载 作者:IT王子 更新时间:2023-10-29 00:36:03 26 4
gpt4 key购买 nike

我正在尝试制作一个脚本,用于将我的主目录和其他重要目录备份到外部驱动器,同时排除某些目录和文件类型 (--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 冲突。

我建议您执行以下操作。

  1. $EXCL_FROM转换为普通过滤文件,即在每行前插入减号,使其排除规则。
  2. 从 rsync 选项中删除 --exclude-from=$EXCL_FROM--delete-excluded
  3. 在 rsync 选项中包含 -FF
  4. 在调用 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'

关于linux - 如何防止在 rsync 中删除目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16795363/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com