我编写了一个 bash 脚本,用于将文件夹和文件从一台机器备份到我们的备份服务器。我的目标是从每周备份中排除所有超过 6 个月的文件。为此,我使用 find 命令构建了一个包含这些文件路径的 txt 文件。
find . -type f -mtime -200 -fprintf $SCRIPT_DIR/Exclusions.txt "%P\n"
然后我使用了 rsync 的选项“--include-from”。
rsync . -e ssh -qrtl --exclude-from=$SCRIPT_DIR/Exclusions.txt $USER@$DEST_SRV:$DEST_DIR
结果是备份成功但包含失败。因此,所有文件都备份了,即使是 6 个月前的文件。
我该怎么办呢?
提前致谢
答案1
根据手册页,
--exclude=PATTERN exclude files matching PATTERN
--exclude-from=FILE read exclude patterns from FILE
--include=PATTERN don't exclude files matching PATTERN
--include-from=FILE read include patterns from FILE
排除是根据文件中的读取模式进行的,而不是根据文件名称本身。
我同意根据名称包含/排除文件也可能很麻烦,但这不是它的工作原理。
您可以尝试这样的操作来包含一周前更新的文件:
--files-from=<(find . -mtime -7 -print0)
答案2
好的,我解决了我的问题!“find”行保持不变:
find . -type f -mtime -200 -fprintf $SCRIPT_DIR/includes.txt "%P\n"
我使用“--files-from”选项而不是“--exclude-from”
rsync . -e ssh -qrtl --files-from=$SCRIPT_DIR/includes.txt $USER@$DEST_SRV:$DEST_DIR