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

时间:2013-12-13 15:59:26

标签: linux rsync

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

我目前使用的是:

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

2 个答案:

答案 0 :(得分:3)

这是一个棘手的问题,因为Unix系统没有“二进制”和“文本”文件之间区别的硬性和快速定义。您可以使用file命令并在输出中搜索text来做得很好(请参阅How to tell binary from text files in linux),因此我会运行find来生成列表file认为是文本的文件,并将其用作rsync的文件列表:

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

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

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

答案 1 :(得分:1)

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

但这只是含糊不清的指定。也许它很适合你,也许它假设除了你以外的其他东西。所以要小心并正确测试。

此外,您可以在find之前运行rsync,扫描整个树以查找与您的“二进制”(可能是已编译的可执行文件?)相匹配的文件,并将所有名称放在排除随后使用选项--exclude-from的文件。