rsync 排除 AppData 但包含 Firefox 书签?

rsync 排除 AppData 但包含 Firefox 书签?

我想使用 cygwin 和 rsync 备份我的 Windows 主目录:

rsync.exe -vrt --delete --exclude=AppData "/cygdrive/C/Users/user1/" "/cygdrive/D/backup/"

正如你所看到的,我排除了应用程序数据目录。

是否可以将我的 Firefox 书签包含在以下路径中?

AppData/Roaming/Mozilla/Firefox/Profiles/*/places.sqlite

星号代表配置文件名称。这是未知的,因为 Firefox 会在那里生成随机名称。

也许可以使用带有 --exclude-from 的排除脚本?

我知道可以复制地点.sqlite使用 power shell 复制到另一个文件夹,然后备份该文件夹。

但也许直接使用 rsync 是可能的。

答案1

这几乎是重复的rsync:使用过滤器排除顶级目录,但包含其一些子目录

您需要包含AppData用于搜索的文件夹树,您可以找到该places.sqlite文件夹​​,但排除除该文件之外的所有内容。

rsync --dry-run -av --prune-empty-dirs \
    --include '/AppData/Roaming/Mozilla/Firefox/Profiles/*/places.sqlite' \
    --include '*/' \
    --exclude '/AppData/***' \
    '/cygdrive/C/Users/user1/' '/cygdrive/D/backup/'

停止--prune-empty-dirs目标被填充目录,否则这些目录将保持为空,因此rsync仅创建保存正在复制的文件所需的目录。 (有点奇怪,这不是默认操作,但事实并非如此。)

在我的系统上,places.sqlite是 underProfiles/*而不是Profile/*,所以我相应地调整了我的建议命令。如您所料,--dry-run当您对结果满意时将其删除。

答案2

这是另一个决定,制作符号链接:将places.sqlite移动到rsync包含范围中的某个位置,例如c:\places\*\places.sqlite

mklink c:\places\*\places.sqlite AppData\Roaming\Mozilla\Firefox\Profile\*\places.sqlite

甚至对于目录,语法为:

mklink /d <Link> <Target>

结果,rsync 将复制所有需要的数据,并跳过其他数据。

答案3

首先创建一个包含以下内容的 include.txt 文件:

+ AppData/Roaming
+ AppData/Roaming/Mozilla
+ AppData/Roaming/Mozilla/Firefox
+ AppData/Roaming/Mozilla/Firefox/Profiles
+ AppData/Roaming/Mozilla/Firefox/Profiles/*/places.sqlite
- AppData/*
- AppData/Roaming/*
- AppData/Roaming/Mozilla/*
- AppData/Roaming/Mozilla/Firefox/*
- AppData/Roaming/Mozilla/Firefox/Profiles/*/*

然后在rsync中使用它并带有参数--include-from=include.txt

此解决方案不需要 --prune-empty-dirs,因此您也可以备份空目录。此外,也无需创建链接。

相关内容