0

好吧,SoF,这有点难以解释,但我会尽力而为。

我有 2 个相同的驱动器。让我们称“S:”为源,“D:”为目标

S:是我保存所有文件(图像、音乐、视频、文档等)的驱动器,D:是我每周日晚上(手动)备份的备份 HD。

我想做的是,用一些规则将 S: 备份到 D: 中。

就像我说的,我每周做一次备份。这意味着在整个一周中,文件都会被添加、删除并从一个文件夹移动到另一个文件夹。

  1. 仅复制新文件或已修改的文件(需要检查文件的元数据)

  2. 在备份结束时,D: 最终必须与 S: 相同。

意思是,如果我将文件从文件夹“A”移动到 S: 中的文件夹“B”,后面会看到该文件不再位于文件夹“A”中,并且必须将其删除,以使该文件夹与年代:。

第 2 步可能解释得不好。,所以这里有一个更好的解释。如果 rsync 做不到,这就是我计划做的事情。

在 python 中,我将创建一个执行以下操作的脚本(按顺序):

  1. 将 D: 与 S: 进行比较 - 脚本将首先遍历 D:。每次它进入一个目录时,它都会查看 S: 中的同一个目录。然后它查看文件。如果一个文件在 D: 但不在 S: 中,这意味着该文件已被删除或重命名或在 S: 中移动。因此,从 D 中删除该文件:(对所有文件夹重复此过程)

  2. 现在 D: 具有完全相同的文件(如果在上述步骤中删除它们,则更少),开始复制。先检查S:中的当前文件是否存在于D:中,如果不存在,则复制。如果是,请检查元数据。如果已修改,请复制并覆盖。

抱歉,如果我解释得不好,现在是凌晨 4 点 15 分,坦率地说,我厌倦了手动删除所有 D: 并从 S: 复制文件:=/

4

2 回答 2

2

这是我为将我的 linux 机器备份到 USB 驱动器而编写的脚本。

#!/bin/sh

rsync -a \
  --progress \
  --hard-links \
  --whole-file \
  --delete \
  --delete-after \
  --delete-excluded \
  --stats \
  --filter='- *.log' \
  --filter='- /dev' \
  --filter='- /boot' \
  --filter='- /media/' \
  --filter='- /mnt' \
  --filter='- /net' \
  --filter='- /proc' \
  --filter='- /tmp/' \
  --filter='- /var/log/' \
  / /media/disk/middle-earth

--filter行排除了我不想同步的文件/子目录。

您可以以此为起点来制作自己的作品。

于 2009-07-13T14:23:36.707 回答
1

我认为您正在寻找--archiveswitch 以及--deleteto rsync。也就是说,如果我正确地假设您的描述意味着“我希望 D: 在运行备份后具有与 S: 相同的内容,而不必首先删除 D: 上的所有内容”。

我还假设尽管您使用 Windows 表示法来表示驱动器号,但您实际上并未使用 Windows。

于 2009-07-13T08:24:00.830 回答