rsync --files-from 等效

rsync --files-from 等效

我正在尝试从运行旧版本 rsync 的服务器备份一些内容 - 由于各种原因,我无法直接升级软件。

通常,我会使用 --files-from 并提供要备份的文件和目录列表,但此版本的 rsync 没有该开关。有没有办法使用其他开关让旧版 rsync 以相同的方式运行?

我尝试了 --include-from= --exclude=* 的组合,但是看起来递归不够(例如,/etc/* 仅备份 /etc 正下方的内容)。

答案1

我怀疑在这种情况下 xargs 是你的朋友。

完全未经测试:

 # cat file | xargs -IREPLACE rsync -v REPLACE server:/path

xargs 将从 stdin 获取数据并将其添加到命令行,每行输入一个参数,直到填满命令行长度,然后运行单独的命令,直到所有输入行都用完。这意味着 rsync 可以运行多次。在这种情况下这应该不是问题,但对于其他命令可能存在问题。

通常 xargs 只是将参数放在行尾,但使用 rsync 时,您希望将目标放在最后,因此我们使用 -I 选项将字符串替换为参数。(这是未经测试的部分)。我也不太确定 rsync 会对路径做什么,因此请在愤怒地使用它之前仔细测试。

如果您确实遇到 xargs 问题,则可以使用类似以下命令:

for i in $(cat file); do rsync -v $i server:/path; done

如果文件较大,您可能希望改用 while/read 循环。这会慢得多,因为它一次只能处理一个文件。

答案2

如果您的包含/排除不是递归的,也许您没有指定-r?如果您习惯使用,--files-from那么您可能已经摆脱了这个习惯。

除此之外,提供您正在使用的确切命令可能会有所帮助。/ include-fromexclude-from我来说绝对可以很好地递归。

答案3

当 rsync 单独无法很好地放置文件时,我以前不得不在某些服务器上使用这个愚蠢而实用的解决方案。使用 tar 仅抓取您想要的文件:

cat INCLUDES
/home/user/index.htm
/home/user/robots.txt

tar cf INCLUDES.tar INCLUDES
for file in `cat INCLUDES`; do tar -r --file=INCLUDES.tar $file; done

rsync -avzP INCLUDES.tar [email protected]:./remote_path

--- Now on remote server

mkdir INCLUDES
tar xf INCLUDES.tar -C ./INCLUDES
rsync -avzP INCLUDES/home/user/ /home/user/

相关内容