我需要通过非常慢的链接将文件夹复制到多个目的地。
目前我使用 find 创建了一个文本文件。
find "$sourcedir" -exec ls -la {} \; > "$statefile"
然后,我将其与之前以相同方式创建的文件进行比较,以确定脚本是否应退出或执行一些 rsync。最后,新的状态文件将成为下次脚本运行时的旧状态文件。
if ! diff "$statefile" "$statefile".old
有没有更好的方法最大限度地减少源上的资源使用?(与 Debian 上的 bash 兼容。)
我是否应该只运行第一个 rsynd,然后在更改后再执行其余操作?如何判断 rsync 在第一个 rsync 之后是否实际修改了任何文件?
答案1
您想减少 find、ls 和 diff 使用的资源吗?我猜想这必定与大量文件有关...
-exec ... +
显然,通过使用而不是 ,您可以节省大量 ls 调用-exec ... ;
。而且您可以考虑完全摆脱 ls,因为它可以完成 find 本身无法完成的任何任务。您可以使用 find 的 printf 值生成文件,从而创建或多或少相同的输出。但是:ls 和 find 都无法检测某些 ACL 和扩展属性更改。
一种完全不同的方法:FAM(文件更改监视器)。让内核告诉您(例如fileschanged
)什么(可能)发生了变化。
还有一个提示:像 rdiff-backup 这样的程序应该比 rsync 需要更少的带宽,因为
- 检查在当地进行
- 检查仅进行一次,而不是针对每个目标都进行检查