Ant를 사용하여 디렉토리를 복사하는 방법


99

copydir디렉토리 트리를 복사하는 데 사용 했지만 더 이상 사용되지 않습니다. 내 디렉토리에는 일부 하위 디렉토리가 포함되어 있으며 일부에는 파일이 포함되고 다른 일부에는 더 많은 하위 디렉토리가 포함되어 있습니다.

전체 트리를 복사하려면 어떻게해야합니까?


5
재귀 복사를 원하는 것 같습니다. 이것이 Omnipresent가 제공 한 솔루션입니다. 질문에 "재귀"라는 단어가 나타나면 더 많은 사람들이이 질문을 찾을 수 있습니다.
Jason

답변:


113
<copy todir="${dest.dir}" >  
    <fileset dir="${src.dir}" includes="**"/>  
</copy> 

그것이 당신이 원하는 것을 할 것이라고 믿습니다 ... (재귀 복사 완료)


3
분명히,는 includes당신이 모든 (사용자 의해 답변을 참조 할 때 필요하지 않습니다 를 Sin )
아벨

40
이 사본 {src.dir}의 내용이 아니라 실제 디렉토리
cmcginty

복사하지 않았지만 내용입니다.
A-Live

당신이 허용 대답이기 때문에, 당신은 ;-) (ERY의 대답은 정확)가 정답이 될 수정할 수
기독교 튀김이

나는 SO의 아이디어가 집단 큐 레이션이라고 생각하기 때문에 누구나 다른 사람의 질문을 편집 할 수 있습니다 (편집 검토를 건너 뛰려면 많은 담당자가 필요하지만).
Andrew Spencer

117

디렉토리 자체를 포함한 내용을 복사합니다.

<copy todir="${dest.dir}" >  
    <fileset dir="${src.dir.parent}">  
        <include name="${src.dir}/**"/>
    </fileset>
</copy>

참고 : $ {src.dir}은 전체 경로가 아니라 $ {src.dir.parent}에 상대적입니다.


12
이것은 정답이어야합니다. 다른 대답은 "어떻게 Ant를 사용하여 디렉토리의 내용을 복사합니까"라는 질문에 대한 것입니다. 미묘한 차이가 있습니다.
cmcginty 2013 년

"정답이되어야합니다.": 물론 예상되는 경로 이름으로 리소스를로드 할 수없는 경우 차이가 그다지 미묘하지는 않습니다.
Jim Pivarski 2013

1
개미 1.8에서는 작동하지 않습니다. 아무 일도 일어나지 않은 것 같습니다.
CCC

8
@CCC는 $ {src.dir}이 전체 경로가 아니라 $ {src.dir.parent}에 상대적 인지 확인 합니다
Mike Demenok

매우 방법 오해의 소지가 x.parent을지지 않습니다하도록되어 parentx... -_-
nonchip

25

디렉토리 만 지정하면됩니다 (include 속성 제외).

<copy todir="../new/dir">
    <fileset dir="src_dir"/>
</copy>

자세한 내용과 예제 는 설명서 를 참조하십시오.


13
@ s1n이 명령은 src_dir의 모든 내용을 src_dir이 아닌 ../new/dir에만 복사합니다. src_dir (디렉토리)를 다른 위치에 어떻게 복사합니까?
Pipalayan Nayak 2011


2

요점 : ant는 소스 파일이 대상 파일보다 최신 인 경우에만 하위 디렉토리를 복사합니다. [1] 제 경우에는 변경 사항이없고 이미 대상에 있었기 때문에 하위 디렉터리가 복사되지 않았습니다 (verbose = "true"사용 중). "덮어 쓰기"를 사용하여 강제하거나 소스 하위 디렉토리의 일부 파일을 터치 할 수 있습니다.


2

내 build.xml 파일의 아래 코드 스 니펫에 표시된 것과 같이 include 태그를 사용하여 디렉토리 내부의 개별 jar 파일을 복사했습니다.

<target name="devInstall" depends="generateXsl" description="testing">
<copy flatten="true" todir="${test}/WEB-INF/lib" overwrite="${overwrite}">
                <fileset refid="buildJars"/>
                <fileset dir="lib">
                    <include name="commons-collections-*.jar"/>
                    <include name="commons-io-*.jar"/>              
                    <include name="kodo/*.jar"/>
                    <include name="mail*.jar"/>    
                    <include name="activation*.jar"/>               
                    <include name="guava*.jar"/>
                    <include name="jna*.jar"/>                          
                </fileset>          
            </copy>
</target>

1

여기 예제 에서 복사 작업을 사용하여 간단한 Ant 파일을 작성할 수 있습니다.

<project name="MyProject" default="copy" basedir=".">
    <target name="copy">
        <copy todir="./new/dir">
           <fileset dir="src_dir"/>
        </copy>
    </target>
</project>

내부의 모든 항목 src_dir(제외)을 new/dir.


6
이것은 디렉토리의 내용을 복사하는 것입니다. 직접 포함하는 내용이 아닙니다. :(
ghostCoder

1

모든 하위 폴더를 복사하기 위해보다 일반적인 패턴을 추가하고 있습니다.

<copy todir="${dest.dir}" >  
  <fileset dir="${src.dir}" includes="**/*"/>
</copy>

자세한 내용은 패턴 을 참조하십시오.


1

또 다른 개미 작업은 Copydir 입니다. 여기서 중요한 부분은 dest 디렉토리 뒤에 복사하려는 디렉토리의 이름을 포함하는 것입니다. 하위 디렉토리와 파일이 자동으로 복사됩니다.

<target name="-post-jar">
    <copydir src="config" dest="${dist.dir}/config/"/>
</target>

링크에서 : 이 작업은 더 이상 사용되지 않습니다. 대신 복사 작업을 사용하십시오.
Jim

0

이 코드는 폴더와 그 내용을 복사해야합니다. 또한 수동 경로 구문 분석을 수행 할 필요가 없도록 basename 태스크를 사용합니다.

<project name="Build" default="doCopy">
  <property name="source.dir" value="SourceDirPathGoesHere"/>
  <property name="dest.dir" value="DestinationDirPathGoesHere"/>
  <target name="doCopy">
    <basename property="source.dir.base.name" file="${source.dir}"/>
    <copy todir="${dest.dir}">
      <fileset dir="${source.dir}/.." includes="${source.dir.base.name}/**"/>
    </copy>
  </target>
</project>

0

마침내 다음 코드를 사용하여 복사했습니다.

<copy todir="${root.dir}/dist/src">  
                <fileset dir="${root.dir}/build/src" includes="**"/>  
            </copy>

dist에서 빌드로 src 폴더를 복사합니다.

이것이 누군가를 돕기를 바랍니다.


그것은 말 그대로 다른 방법으로 복사 할 것이라고 말합니다 : P
nonchip
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.