2013-01-11 3 views
2

는 그래서 하나의 디렉토리에 파일이 들어있는 파일 세트가 있습니다은 파일 이름을 파일 세트 삭제하지만, 다른 디렉토리에

<fileset id="modules" dir="${modules.dir}"> 
    <include name="core*.jar"/> 
    <include name="fileset*.jar"/> 
    <include name="upgrader*.jar"/> 
    <include name="hello*.jar"/> 
</fileset> 

그러나 이러한 파일은 $ {lib.dir}에 복사, 즉, $ {LIB를 .dir}에는 core * .jar, fileset * .jar 등의 사본이 들어 있습니다. 복사 된 파일을 어떻게 삭제합니까?


또한 ant-contrib와 같은 외부 라이브러리를 사용할 수 없습니다.

답변

3

이름 집합을 정의하려면 PatternSet을 사용하십시오. 그런 다음 임의의 수의 FileSet에서 해당 PatternSet을 참조하십시오.

<patternset id="module.patterns"> 
    <include name="core*.jar"/> 
    <include name="fileset*.jar"/> 
    <include name="upgrader*.jar"/> 
    <include name="hello*.jar"/> 
</patternset> 

<fileset id="modules" dir="${modules.dir}" > 
    <patternset refid="module.patterns"/> 
</fileset> 

UPDATE :

만 원본 파일을 원하는 의견을 감안할 때,이 시도 :

<pathconvert pathsep="," property="flattened.modules" refid="modules"> 
    <mapper type="flatten" /> 
</pathconvert> 

<filelist id="libmodules" dir="${lib.dir}" files="${flattened.modules}"/> 
+0

을 $ {lib 디렉토리에있는 파일 세트를 생성하는 것입니다 다음 단계를 가정. dir}이 module.patterns 패턴 세트와 일치하면 작동하지 않습니다. 이것은 $ {lib.dir}에 $ {modules.dir}에없는 다른 코어 * .jar 파일이 있고 (복사되지 않았기 때문에) 이것도 삭제하고 싶지 않기 때문입니다. – Amil

+0

업데이트 해 주셔서 감사합니다. – Amil

+0

이 답변도 도움이 될 수 있습니다. http://stackoverflow.com/questions/13290555/ant-how-to-delete-files-that-are-not-present-in-another-directory – satur9nine