【问题标题】:rsync: inclusion of only specific directories does not always workrsync:仅包含特定目录并不总是有效
【发布时间】:2023-02-26 06:08:39
【问题描述】:

我正在编写一个脚本来使用 rsync 创建增量备份。我有一个包含文件,只包含子目录的特定目录。其余的应该排除在外。对于我正在测试的源目录,一切都按预期工作,但是当我尝试将我的文件实际备份到我的外部驱动器时却没有。

到目前为止,这是脚本:

SOURCE_DIR="$HOME/"
DEST_DIR="/Volumes/Stuff/Backup/"

if [ ! -d "$SOURCE_DIR" ]; then
    echo "\"${SOURCE_DIR}\" does not exist."; exit
elif [ ! -d "$DEST_DIR" ]; then
    echo "\"${DEST_DIR}\" does not exist."; exit
fi

PARENT_DIR="$(cd "$(dirname "$0")"; pwd)"
DIR_NAME="$(date '+%Y%m%dT%H%M%S')"
BACKUP_DIR="$DEST_DIR/$DIR_NAME"
LATEST_LINK="$DEST_DIR/latest"
INCLUDE_FILE="$PARENT_DIR/include.txt"

mkdir -p "$BACKUP_DIR"

rsync -av \
  --delete \
  --prune-empty-dirs \
  --include-from="$INCLUDE_FILE" \
  --link-dest="$LATEST_LINK" \
  "$SOURCE_DIR" \
  "$BACKUP_DIR"

rm -f "$LATEST_LINK"
ln -s "$BACKUP_DIR" "$LATEST_LINK"

echo "Size of current backup:" "$(du -sh "$BACKUP_DIR")"
echo "Size of all backups:" "$(du -sh "$DEST_DIR")"

include.txt 文件内容如下:

- .DS_Store
- /Downloads/
+ /Library/
+ /Library/Application Support/***
+ /Library/Preferences/***
- /Library/***  

include.txt 中的路径是相对于我假定的源目录的。基本上我想备份我的主目录,但不包括 DownloadsLibrary 中的所有内容,除了它的子目录 Application SupportPreferences

我已经搜索了一个答案,据我所知,有些人有类似的问题,但包含文件看起来没问题。它适用于测试目录。我哪里错了?

我希望 DownloadsLibrary 中的所有内容,除了它的子目录 Application SupportPreferences 被排除在外,但它们总是被包括在内。我更改了includes.txt,因为起初它根本不起作用。现在,当我从$HOME/backup/test-source/ 备份到$HOME/backup/test-dest 时它确实有效,但当我真正想要从$HOME/ 备份到/Volumes/Stuff/Backup/ 时却不起作用。

谢谢你的时间 :)

【问题讨论】:

  • 添加标志 --delete-excluded 有帮助吗?

标签: bash backup rsync


【解决方案1】:

问题是您的规格“包含自“ 文件。

应该有无前导/用于相对路径引用。

此外,excludes 应该都在 includes 之后确保那些不会被忽略......因为它们可能属于前面排除的范围(即- 图书馆/).

您的文件应包含以下内容:

+ Downloads/***
- Library/Application Support/***
- Library/Preferences/***
+ Library/***
- *

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-24
    相关资源
    最近更新 更多