Ant:scp 创建目录,如果不存在 [英] Ant: scp create directory if not exist

查看:66
本文介绍了Ant:scp 创建目录,如果不存在的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用它从 A 复制到 B.但是,如果例如文件夹/config 不存在,它会给我一个例外.我该如何解决?我试过 mkdirs="true" 但它也会出错

I am using this to copy from A to B. But if for example the folder /config doesnt exist it gives me an exception. How can I solve it? I tried mkdirs="true" but it runs to error as well

<scp todir="${ftplogin}@${ftpserver}:${ftp-remote-dir}/config" verbose="false" trust="true" failonerror="No">
            <fileset dir="${stuff}/${stuff-version}/config${config-files}">
                <include name="*.*"/>               
            </fileset> 
        </scp>

推荐答案

无法使用 scp 任务创建远程目录.这是 scptransfer 的宏定义,它完成了传输所需的所有工作从给定的 stagedirectory => 修复换行符,createremote,deleteremote,如果 stagedir 为空则失败……等等.Macrodef 正在使用 ant 插件 Flaka,如果您不需要所有这些花里胡哨的东西,只需使用sshexec task 使用 mkdir -p在 scp 创建远程目标目录之前.

It's not possible to create remote directories with scp task. Here's a macrodef for scptransfer, that does all the work needed for transfer from a given stagedirectory => fix linefeeds, createremote, deleteremote, fail if stagedir empty ... etc. Macrodef is using ant addon Flaka, if you don't need all that bells and whistles, simply use sshexec task with mkdir -p before scp to create your remote targetdir.

<project xmlns:fl="antlib:it.haefelinger.flaka">

<fl:install-property-handler/>

<macrodef name="scptransfer">
 <attribute name="host" default="${aix.host}"/>
 <attribute name="userid" default="${aix.userid}"/>
 <attribute name="knownhosts" default="${aix.knownhosts}"/>
 <attribute name="ppk" default="${aix.ppk}"/>
 <attribute name="createremote" default="false"/>
 <attribute name="remotedir" default="${eartarget}/${project}/${env}/${module}/${job.id}"/>
 <attribute name="deleteremote" default="false"/>
 <attribute name="deleteincludes" default="*"/>
 <attribute name="stagedir" default="${artifactdir}/${module}"/>
 <attribute name="stageincludes" default="**/*.*"/>
 <attribute name="stageexcludes" default=""/>
 <attribute name="failstageempty" default="true"/>
 <attribute name="fixLF" default="false"/>
 <attribute name="timeout" default="900000"/>
 <attribute name="verbose" default="true"/>

 <sequential>
   <echo>
   =============== SCP Transfer ===============
    Project          = ${project}
    Environment      = ${env}

    UserID           = @{userid}
    Targetserver     = @{host}
    Targetpath       = @{remotedir}
    fixLF ?          = @{fixLF}
    createremote ?   = @{createremote}
    deleteremote ?   = @{deleteremote}
    #{@{deleteremote} ? 'deleteincludes   = @{deletecincludes}' : '' }
    Stagedir         = @{stagedir}
    stageincludes    = @{stageincludes}
    stageexcludes    = @{stageexcludes}
   =============== SCP Transfer ===============
   </echo>
   <!-- contents in stagedir ? -->
   <resourcecount property="stagecount">
    <fileset dir="@{stagedir}" includes="@{stageincludes}" excludes="@{stageexcludes}" id="stagecontents"/>
   </resourcecount>
     <fl:choose>
       <fl:when test=" ${stagecount} > 0 ">
         <!-- Fix Linefeeds for ASCII Files -->
         <fl:when test=" @{fixLF} ">
           <fixcrlf
             excludes="**/*.jar **/*.tar **/*.zip **/*.ear **/*.class"
             srcdir="@{stagedir}"
             eol="lf"
             eof="remove"
             fixlast="true"
           />
         </fl:when>
         <!-- // T i m e o u t -->
         <parallel threadcount="1" timeout="@{timeout}">
           <!-- create remotedir ? -->
           <fl:when test=" @{createremote} ">
             <sshexec host="@{host}"
                  username="@{userid}"
                  knownhosts="@{knownhosts}"
                  keyfile="@{ppk}"
                  command="mkdir -p @{remotedir}"
             />
           </fl:when>
           <!-- delete contents in remotedir ?
            will throw error if remotedir doesn't exist ! -->
           <fl:when test=" @{deleteremote} ">
             <sshexec host="@{host}"
                  username="@{userid}"
                  knownhosts="@{knownhosts}"
                  keyfile="@{ppk}"
                  command="cd @{remotedir};rm -rfe @{delfilepattern}"
             />
           </fl:when>
           <!-- Filetransfer from stagedir -->
           <scp todir="@{userid}@@@{host}:@{remotedir}"
                keyfile="@{ppk}"
                knownhosts="@{knownhosts}"
                sftp="true"
                verbose="@{verbose}"
           >
             <fileset refid="stagecontents"/>
           </scp>
         </parallel>
         <!-- T i m e o u t // -->
       </fl:when>
       <fl:otherwise>
         <echo>
         =============== SCP Transfer =============
               Skip => NO StageDirContents !!
         =============== SCP Transfer =============
         </echo>
         <fl:fail message="Stagedir [@{stagedir}] empty !!" test=" @{failstageempty} "/>
       </fl:otherwise>
     </fl:choose>
 </sequential>
</macrodef>

</project> 

因为我们最近才切换到 Github 获取手册这里和一些示例此处.

As we switched to Github only recently get the manual here and some examples here.

这篇关于Ant:scp 创建目录,如果不存在的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆