linux - 使用 rsync 备份

标签 linux ubuntu rsync

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

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

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

就像,我说过,我每周做一次备份。这意味着在一周内,文件会被添加、删除以及从一个文件夹移动到另一个文件夹。

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

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

意思是,如果我将一个文件从文件夹“A”移动到文件夹“B”中的 S:,后面会看到该文件不再位于文件夹“A”中,并且必须删除它,才能做到这一点与 S: 相同的文件夹。

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

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

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

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

最佳答案

这是我编写的用于将我的 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 行排除了我不想同步的文件/子目录。

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

关于linux - 使用 rsync 备份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1118246/

相关文章:

c - SPI EP93xx(带 Linux 的 TS7200 板)

batch-file - .bat 中通过 Plink 的脚本表现不同

directory - 你如何让 rsync 排除任何名为缓存的目录?

ubuntu - 无法使用 Snapcraft 创建快照

git - rsync .git 目录

rsync - 从服务器 rsync 到本地计算机时出现错误

c++ - G++ 命令行使用线程标记,linux makefile 不使用

c++ - 如何传递信号以解除对 Linux 中 pause() 的阻塞?

linux - 在 Linux 上按身份跟踪文件

ubuntu - 如何在 Ubuntu 10 中更改 gnome 终端标题