我正在尝试从运行旧版本 rsync 的服务器备份一些东西 - 由于各种原因,我不能只升级软件。
通常,我会使用 --files-from 并给出要备份的文件和目录的列表,但是这个版本的 rsync 没有那个开关。有没有办法与其他开关一起使旧的 rsync 以相同的方式运行?
我尝试了 --include-from= --exclude=* 的组合,但这看起来不够递归(例如,/etc/* 只备份直接在 /etc 下的东西)。
我正在尝试从运行旧版本 rsync 的服务器备份一些东西 - 由于各种原因,我不能只升级软件。
通常,我会使用 --files-from 并给出要备份的文件和目录的列表,但是这个版本的 rsync 没有那个开关。有没有办法与其他开关一起使旧的 rsync 以相同的方式运行?
我尝试了 --include-from= --exclude=* 的组合,但这看起来不够递归(例如,/etc/* 只备份直接在 /etc 下的东西)。
我怀疑 xargs 在这种情况下是你的朋友。
完全未经测试:
xargs 将从标准输入获取数据并将其添加到命令行,每个输入行一个参数,直到它填满命令行长度,然后运行一个单独的命令,直到所有输入行都用完。这意味着 rsync 可以运行不止一次。在这种情况下,这应该不是问题,但可能与其他命令有关。
通常 xargs 只是将参数粘贴在行尾,但是使用 rsync 您希望将目标放在最后,因此我们使用 -I 选项将字符串替换为参数。(这是未经测试的位)。我也有点不确定 rsync 会对路径做什么,所以请在愤怒使用它之前仔细测试一下。
如果您确实对 xargs 有疑问,您可以使用类似的方法:
如果您的文件较大,您可能希望使用 while/read 循环。这会慢得多,因为它一次只处理一个文件。
如果您的包含/排除没有递归,也许您没有指定
-r
?如果您习惯使用,--files-from
那么您可能已经摆脱了这种习惯。除此之外,给出您正在使用的确切命令可能会有所帮助。
include-from
/exclude-from
对我来说绝对递归。当单独的 rsync 不想放置好的时候,我以前不得不在某些服务器上使用过愚蠢的废话解决方案。使用 tar 只抓取你想要的文件: