用于在备份之前检测 Linux 上移动或重命名的文件的工具或脚本

用于在备份之前检测 Linux 上移动或重命名的文件的工具或脚本

基本上,我正在寻找是否存在可以检测移动或重命名文件的工具或脚本,以便我可以获得重命名/移动的文件列表并在网络的另一端应用相同的操作以节省带宽。

基本上,磁盘存储很便宜,但带宽却不便宜,问题是文件经常会被重新组织或移动到更好的目录结构中,因此当您使用 rsync 进行备份时,rsync 不会注意到它是一个重命名或移动的文件,并且尽管另一端有相同的文件,但仍会通过网络再次重新传输它。

所以我想知道是否存在一个脚本或工具可以记录所有文件的位置及其名称,然后在备份之前,它会重新扫描并检测移动或重命名的文件,然后我可以获取该列表并在另一端重新应用移动/重命名操作。

以下是这些文件的“一般”特征的列表:

  1. 大型不变文件
  2. 它们可以重命名或移动

[编辑:]这些都是很好的答案,我最终会查看所有答案并编写一些代码来处理这个问题。基本上我现在正在考虑/正在做的是:

  1. 使用像 AIDE 这样的程序进行“初始”扫描并允许我保留文件的校验和,因为它们应该永远不会改变,所以它有助于检测损坏。
  2. 创建一个 inotify 守护进程来监视这些文件/目录并记录与重命名和将文件移动到日志文件相关的任何更改。
  3. 在某些极端情况下,inotify 可能无法记录文件系统发生的某些事情,因此最终的使用 find 在文件系统中搜索更改时间晚于上次备份

这有几个好处:

  1. 来自 AIDE 的校验和等,可以检查/确保某些媒体没有损坏
  2. Inotify 保持较低的资源使用率,无需反复重新扫描文件系统
  3. 不需要修补 rsync;如果我必须修补一些东西,我可以,但我宁愿避免修补一些东西以减轻负担,(即每次更新时不需要重新修补)。
  4. 我以前使用过 Unison,它确实很棒,但是我敢发誓 Unison 确实在文件系统上保留了副本,而且它的“存档”文件会变得相当大?

答案1

答案2

这是一个有点奇怪的解决方案,但是...git 根据文件内容检测移动和重命名,所以如果你将相关目录置于版本控制之下,那么 git 将能够检测到移动等并避免传输内容(因为它已经在线的两侧)同时仍然在树中移动内容。

只是一个想法。

答案3

这里有有趣的建议。还考虑使用文件系统功能,即 ZFS。奇怪的是没有工具可以做这么简单的事情。正如人们报告的那样,Unison 选项在大多数情况下不起作用,对我来说也不起作用。

我希望该功能能在重新排列文件夹时保持我的电影收藏在第二个硬盘上的备份同步。

现在我发现了这个简单的 C 脚本http://sourceforge.net/projects/movesync/

看起来运行良好。运行它然后与 ie unison 正常同步。

答案4

你可以尝试齐奏;尤其是

-xferbycopying 使用本地副本优化传输(默认为 true)

中提到的选项文档作为

设置此首选项后,Unison 将尝试避免通过网络传输文件内容,方法是识别目标副本中是否已存在具有所需内容的文件。这通常允许文件移动非常快速地传播。默认值为 true。

看起来它可以做你想做的事。

相关内容