【发布时间】: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 中的路径是相对于我假定的源目录的。基本上我想备份我的主目录,但不包括 Downloads 和 Library 中的所有内容,除了它的子目录 Application Support 和 Preferences。
我已经搜索了一个答案,据我所知,有些人有类似的问题,但包含文件看起来没问题。它适用于测试目录。我哪里错了?
我希望 Downloads 和 Library 中的所有内容,除了它的子目录 Application Support 和 Preferences 被排除在外,但它们总是被包括在内。我更改了includes.txt,因为起初它根本不起作用。现在,当我从$HOME/backup/test-source/ 备份到$HOME/backup/test-dest 时它确实有效,但当我真正想要从$HOME/ 备份到/Volumes/Stuff/Backup/ 时却不起作用。
谢谢你的时间 :)
【问题讨论】:
-
添加标志
--delete-excluded有帮助吗?