我想将目录服务器从mac机器同步到linux机器,同时排除.o文件和二进制可执行文件等编译文件。如何排除二进制文件?
我目前使用的是:
rsync -av --compress --exclude="*.o" dir server:dir
答案 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
的文件。