首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ant: scp创建目录(如果不存在)

Ant: scp创建目录(如果不存在)
EN

Stack Overflow用户
提问于 2015-11-02 12:01:31
回答 2查看 5.2K关注 0票数 2

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

代码语言:javascript
复制
<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>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-03 13:08:44

不可能使用scp任务创建远程目录。这里有一个scptransfer宏,它完成从给定的stage目录=>修复行提要、createremote、删除,如果stagedir为空的话传输所需的所有工作。宏don使用addon 弗拉卡,如果您不需要所有这些提示,只需在scp之前使用sshexec任务mkdir -p来创建远程目标。

代码语言:javascript
复制
<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时,直到最近才得到手动这里和一些示例这里

票数 0
EN

Stack Overflow用户

发布于 2016-11-16 14:46:32

在处理之前,可以使用沙克在远程计算机上创建目录树。如果不存在mkdir -p,则创建目录。(仅当一个dir不存在时,如何进行mkdir?)

代码语言:javascript
复制
<sshexec
    host="${host}"
    username="${remote_user}"
    password="${remote_password}"
    command="mkdir -p ${remote_dir_path}"
    trust="true" />

将它添加到scp之前的目标中。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33477138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档