在 Linux 上,有什么比 `find` 或 `diff -r` 更快的方法来查看目录中的内容是否发生了变化?

Han*_*etz 8 linux backup

tar过去常常在我的服务器上创建文件系统不同部分的快照,然后将该快照 ftp 到异地位置进行存档。

我只想在发生变化时才开始该操作。一些备份运行在所有系统文件夹中,这些文件夹很少更改(即安装新软件或修改配置时)。

每当发生变化时,我都想要一个完整的快照。我可以使用 生成修改文件列表find,但我真的只需要知道该列表的长度是否为 0 或更大。使用 find 太慢了。

我知道有增量备份,并且我已经在其他情况下将 rsync 与 ZFS 结合使用。然而,这里的备份主机是一个 FTP 服务器(所以没有 rsync),我需要完整的备份(因为备份存档用作还原或克隆服务器的映像)并且我想要压缩输出(所以 tar 很方便)。

编辑:请注意,我不是在寻找增量备份(我有),而是为了快速(有点排除查找等)和简单的方法来确定完整快照是否与上一个相同。也许我的措辞不太好。我现在编辑了标题。

sle*_*ske 2

GNU find 的最新版本有“-quit”操作,这会导致 find 立即停止搜索:

\n\n
\n

\xe2\x80\x94 操作:-quit

\n\n

立即退出(如果没有发生错误,则返回值为零)。这与 \xe2\x80\x98-prune\xe2\x80\x99 不同,因为 \xe2\x80\x98-prune\xe2\x80\x99 仅适用于修剪目录的内容,而 \xe2\x80\x98- quit\xe2\x80\x99 只是让 find 立即停止。不会有子进程继续运行,但不会再处理命令行上指定的文件。例如, find /tmp/foo /tmp/bar -print -quit 将仅打印 \xe2\x80\x98/tmp/foo\xe2\x80\x99。由 \xe2\x80\x98-exec ... +\xe2\x80\x99 或 \xe2\x80\x98-execdir ... +\xe2\x80\x99 构建的任何命令行都会在程序之前调用已退出。

\n
\n\n

您可以使用 find-expression 来查找已更改的文件,并在找到文件后立即使用 -quit 停止。这应该比 find 继续扫描要快。

\n\n

fileutils V4.2.3 中添加 -quit

\n