如何在使用rsync时排除二进制文件



我想将目录从mac机器rsync到服务器到linux机器,同时排除已编译的文件,如.o文件和二进制可执行文件。如何排除二进制文件?

我现在使用的是:

rsync -av --compress --exclude="*.o" dir server:dir

这是一个棘手的问题,因为Unix系统没有对"二进制"one_answers"文本"文件之间的区别进行硬性定义。使用file命令并在输出中搜索text可以做得很好(请参阅如何在linux中区分二进制文件和文本文件),所以我会运行find来生成一个file认为是文本的文件列表,并将其用作rsync:的文件列表

find dir | xargs file | awk -F: '$2 ~ /text/ { print $1 }' | 
    rsync --files-from=- -av --compress dir server:dir

这将需要进行一些调整,以确保路径名相对于源目录是正确的,等等,但它应该接近您想要的。

从长远来看,我想重新修改我的构建过程,将生成的文件放在dir/build目录中,但这现在可能会有所帮助:-)

您可以在目录中添加.cvsignore文件,并使用选项-Crsync

但这只是你含糊地指定的。也许它很适合你,也许它假设了其他事情而不是你。所以要小心并正确测试。

此外,您可以在rsync之前运行find,在整个树中扫描与您认为的"二进制"(可能是编译的可执行文件?)相匹配的文件,并将它们的所有名称放在一个排除文件中,然后与选项--exclude-from一起使用。

最新更新