使用 rsync 来维护名称发生变化的目录的副本

Tre*_*Jen 5 linux backup rsync

我在 linux 系统上使用 rsync 来同步本地磁盘和连接的 USB 驱动器之间的目录。我遇到的问题是,每天在服务器上创建备份的第 3 方系统实际上更改了嵌套在备份深处的目录的名称。该目录包含备份所需的大部分数据。当 rsync 查看目录时,它看到名称已更改并认为它是一个全新的目录。所以我在 USB 驱动器上的 rsync 副本在它运行的每一天都有一个新目录。

我已经编写了实际将目录名称改回的脚本,但这是一种繁琐的方法!

我正在寻找一种“优雅”的方式来处理这个问题。是否可以创建指向保持不变的目录的链接?rsync 是否可以配置为检测目录是否相同,即使名称已更改?我相信以前有人不得不处理这个问题!

luk*_*yca 5

一种方法是分两步完成。第一,使用忽略模式rsync 除有问题的目录之外的所有内容。2, rsync 只是在 bash 中使用 globbing 的目录来到达目录,如下所示:

rsync -av /usr/lib/mydata/bigdatadir*/ /mnt/usbvolume/bigdatadir/
Run Code Online (Sandbox Code Playgroud)

在源目录上使用尾部斜杠将有效地导致 rsync 忽略目录名称,因为它将在目录的内容而不是目录本身上调用。当然,如果目录以常量前缀或后缀命名,则此通配符将是最简单的,如我上面的示例。如果不是,您可以编写一个脚本来找出目录的实际名称,然后执行以下更直接的操作:

rsync -av /usr/lib/mydata/$BIGDATADIRNAME/ /mnt/usbvolume/bigdatadir/
Run Code Online (Sandbox Code Playgroud)

最后,您的伪代码将是这样的:

  1. 查找 $BIGDATADIRNAME
  2. 像以前一样 Rsync 一切,但忽略 $BIGDATADIRNAME
  3. rsync $BIGDATADIRNAME的内容

  • 男孩,这是一个“DUH”时刻: rsync -av /usr/lib/mydata/bigdatadir*/ /mnt/usbvolume/bigdatadir/ 工作正常。谢谢! (2认同)