我想将目录从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
文件,并使用选项-C
到rsync
。
但这只是你含糊地指定的。也许它很适合你,也许它假设了其他事情而不是你。所以要小心并正确测试。
此外,您可以在rsync
之前运行find
,在整个树中扫描与您认为的"二进制"(可能是编译的可执行文件?)相匹配的文件,并将它们的所有名称放在一个排除文件中,然后与选项--exclude-from
一起使用。