日期:2014-05-16 浏览次数:20523 次
?$是ant中需要转义的,使用$$代替$,不能使用\$,在linux控制台下,输入命令时用的是\$.
?
三种通配符:
**,*,?
?用于匹配1个字符
*,匹配任意字符,0个或者多个,常用于匹配文件类型,或者URL
**,任意目录或者文件,包含任意多个子目录
?
以ant中copy的用法为例:
?
<copy todir="${src.dir}" verbose="false" preservelastmodified="true" > <fileset dir="${home.dir}"> <exclude name="**/build?/**"/> <exclude name="**/workspace/**"/> <exclude name="**/*.java"/> <exclude name="**/log.*"/> </fileset> </copy>
?
其中?<exclude name="**/build?/**"/>表示不包含build?目录,如果build1,build2等
<exclude name="**/*.java"/>,表示不包含所有java类型的文件
<exclude name="**/log.*"/>,表示不包含所有文件名为log,文件扩展名任意的文件
verbose="false" :不显示copy的详细信息,比如哪个文件被copy了;但如果出错,或显示copy出错信息。
preservelastmodified="true" :保留修改时间,这样就容易看出哪些是新文件。
ant中的copy 还可以指定编码。
?
?
<target name="copydb" description="backup db"> <tstamp/> <mkdir dir="${db.bak.dir}"/> <sshexec host="${db.host}" username="${user}" password="${password}" command="mysqldump -uuser -ppassword -h192.168.1.2 -B t_work |gzip >${db.bak.dir}/${DSTAMP}${TSTAMP}t_work.sql.gz" trust="t rue"/> </target
?? 上述命令可实现 ssh登录,并远程执行数据库备份命令,
其中<tstamp/> ,会生产2个属性,后面用到的${DSTAMP}和${TSTAMP},表示日期和时间,用于生产唯一id,使得文件不重复
???? mysqldump -uuser -ppassword -h192.168.1.2 -B t_work |gzip >${db.bak.dir}/${DSTAMP}${TSTAMP}t_work.sql.gz" trust="true"
?
???? 前半部分是一个 数据库备份命令,后半部分是通过管道使用gzip压缩,trust=”true"这个很有必要,表示2台机器互信,否者通常会失败。许多人不知道mysql可以很好的管道支持。如果需要从192.168.1.2上将t_work数据库导入192.168.1.3上,可以如下命令替换:
???? mysqldump -uuser -ppassword -h192.168.1.2 -B t_work |mysql -uuser -ppassword -h192.168.1.3
?
?? 在实现用ant脚本进行2台机器的远程登录执行命令前,需要使用RSA认证。可搜索“Linux ssh 不输入密码”
其实scp也是一样的。使用了该密钥认证后,ssh,scp均不需要输入密码。
?
?基于上述的几个步骤,就可以实现ant脚本,远程登录并执行简单mysql复制和备份以及文件的复制备份功能。
?
?