rsync – 文件 – 等效

我试图从运行旧版本rsync的服务器上退出一些东西 – 由于各种原因,我不能只升级软件。

通常我会使用–files-from并给出一个文件和目录的备份列表,但是这个版本的rsync没有这个开关。 有没有办法,与其他交换机,使旧的rsync行为一样?

我试过了–include-from = –exclude = *的组合,但是这看起来不够充分(例如,/ etc / *只能直接在/ etc下面备份)。

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

完全未经testing:

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

xargs将从stdin获取数据,并将其添加到命令行中,每个input行一个参数,直到填充命令行长度,然后运行单独的命令,直到所有input行用完。 这将意味着rsync可以运行不止一次。 在这种情况下,这不应该是一个问题,但可以与其他命令一起使用。

通常xargs只是将参数放在行尾,但是使用rsync,您希望将目标放在最后,所以我们使用-I选项来replace带有参数的string。 (这是未经testing的位)。 我也有点不确定rsync会怎样处理这些path,所以在使用之前请仔细testing一下。

如果你对xargs有问题,你可以使用如下的东西:

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

如果您的文件较大,则可能需要使用while / read循环。 这将会慢得多,因为它一次只能执行一个文件。

如果你的包含/排除不是recursion的,也许你没有指定-r ? 如果你习惯使用--files-from那么你可能已经习惯了。

除此之外,给你正确的命令可能会有所帮助。 include-from / exclude-from绝对为我妥善地recursion。

愚蠢没有废话的解决scheme,我不得不使用一些服务器之前,当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/