我的 Linux Mint 20.2 计算机设置了以下各项中的数据:
/home/user/Desktop
/home/user/Documents
/home/user/Pictures
/home/user/Videos
/home/user/Downloads
/home/user/GitHub
我使用以下方式备份此数据:rsync -ac --info=progress2 --delete --keep-dirlinks /home/user/{Downloads,Desktop,Documents,GitHub,Pictures,Videos} /media/user/<DRIVE-NAME>
。<DRIVE-NAME> might be
东芝-EXT or
CRUCIALX6-2`;我有几个外部驱动器,所以这是基本语法。这很好用;全新的和更改/更改/更新的本地文件会备份到外部驱动器,因此外部驱动器始终具有最新的,并且我在本地删除的任何内容都会从外部驱动器中删除。这是我想要的行为。
我最近尝试使用:rsync -ac --delete --keep-dirlinks --exclude='GitHub' /media/user/TOSHIBA-EXT /home/user
尝试将我的数据(不包括/GitHub
)从外部驱动器恢复TOSHIBA-EXT
到本地存储。我很失望地发现/home/user/Documents
它不是最新的。
结果,它创建了/home/user/TOSHIBA-EXT
,其中包含目录Downloads
、Desktop
、Documents
、Pictures
、 和Videos
。所以我打开了 rsync 手册页。
这些不起作用:
rsync -ac --delete --keep-dirlinks --exclude='GitHub' /media/user/TOSHIBA-EXT/{Downloads, Desktop, Documents, Pictures, Videos} /home/user/{Downloads, Desktop, Documents, Pictures, Videos}
- 似乎挂了。
rsync -ac --delete --keep-dirlinks --exclude='GitHub' /media/user/TOSHIBA-EXT/{Downloads, Desktop, Documents, Pictures, Videos} /home/user/
- 似乎挂了。
rsync -ac --delete --keep-dirlinks --exclude='GitHub' /media/user/TOSHIBA-EXT/ /home/user/{Downloads, Desktop, Documents, Pictures, Videos}
- 似乎挂了。
rsync -ac --delete --keep-dirlinks --exclude='GitHub' /media/user/TOSHIBA-EXT/ /home/user/
- 失败并出现如下错误:cannot delete non-empty directory: .local/shore/Trash/files/Videos}/TOSHIBA-EXT
。其他错误类似。
rsync -acr --delete --keep-dirlinks --exclude='GitHub' /media/user/TOSHIBA-EXT/ /home/user/
- 返回的错误与上面类似。
rsync -acr --delete --keep-dirlinks --exclude='GitHub' /media/user/TOSHIBA-EXT/ /home/user/
- 创建/home/user/TOSHIBA-EXT
。
我追求的行为是:
复制这些目录的内容 | 恢复到: |
---|---|
/media/user/TOSHIBA-EXT/Desktop |
/home/user/Desktop |
/media/user/TOSHIBA-EXT/Documents |
/home/user/Documents |
/media/user/TOSHIBA-EXT/Pictures |
/home/user/Pictures |
/media/user/TOSHIBA-EXT/Videos |
/home/user/Videos |
/media/user/TOSHIBA-EXT/Downloads |
/home/user/Downloads |
我一直在阅读 rsync 手册页和 duckduckgo 结果,但我认为我需要一些帮助。
我需要如何更改恢复命令才能完成上述恢复行为?
答案1
对于恢复,您在源路径上缺少尾部斜杠。文档 ( man rsync
) 确实说了这一点,但页面很长,很容易错过:
您可以将源上的尾随
/
视为“复制此目录的内容”而不是“按名称复制目录”,但在这两种情况下,包含目录的属性都会传输到目标上的包含目录。
您还应该删除-c
( --checksum
) 标志。它在这里没有增加任何价值,并且会显着降低备份速度。
因此,您的备份应如下所示,在目标中创建目录Downloads
、Desktop
、等:Documents
rsync -avi --delete /home/user/{Downloads,Desktop,Documents,GitHub,Pictures,Videos} /media/user/<DRIVE-NAME>
相应的完整恢复如下所示,其中我添加了u
( --update
) 以避免更新目标上较新的文件,并删除了--delete
以避免删除未备份的目录和文件:
rsync -auvi /media/user/<DRIVE-NAME>/ /home/user/
答案2
有人发布了这个。我想你最后只是多了一个 / 。
尾部斜杠很重要当在源末尾使用“/”时,rsync 将复制最后一个文件夹的内容。当源末尾不使用“/”时,rsync 将复制最后一个文件夹及其内容。注意:源目录上的尾部斜杠 (/) 会修改 rsync 命令的行为。
但我仍然经常需要运行我的脚本并检查它是否有效。我的数据位于安装在 /mnt/data 的分区中,并且包含我的所有文件夹,如文档、音乐等。闪存驱动器通常自动安装在 /media/fred/data256 中,因为其分区标记为 data256。
这是我的恢复:
rsync -aruvP /media/fred/data256/Documents /mnt/data
这是我复制到 256GB 闪存驱动器的副本:
rsync -aruvlP --delete /mnt/data /media/fred/data256
我不会使用 128GB 闪存驱动器复制所有文件夹
rsync -aruvP --delete /media/fred/data128/Documents /mnt/data
rsync -aruvP --delete /mnt/data/Documents /media/fred/data128