2011-04-26 7 views
5

두 개의 디렉토리, 예를 들어 A와 B가 있습니다. A에는 여러 파일이 있습니다. a1, a2, a3. B에는 b1, b2 파일도 있습니다. 첫째, 나는다른 디렉토리에서 복사 한 디렉토리의 파일을 삭제하려면 어떻게해야합니까?

<copy todir="A" verbose="true"> 
    <fileset dir="B" includes="*"/> 
</copy> 

가 그럼 난 B, 즉 B1 및 B2에서 복사 즉있는 파일을 삭제 절차를 취소하려면 A를 B에서 모든 파일을 복사하려면 다음 개미 작업을 사용 . 어떻게 목표를 달성 할 수 있습니까?

참고 : 예제의 파일 이름은 문제를 이해하는 데 사용됩니다. 나는 두 디렉토리에서 정확한 파일 이름을 모른다.

답변

7

Selector를 사용하여 삭제하려는 파일의 FileSet을 채워야합니다. Present Selector을 사용해보십시오. 여기에 귀하의 예를 보완 할 수있는 대상의 :

<target name="copy" > 
<copy todir="A" verbose="true"> 
    <fileset dir="B" includes="*"/> 
</copy> 
</target> 

<target name="uncopy" > 
<delete verbose="true"> 
    <fileset dir="A" > 
     <present present="both" targetdir="B"/> 
    </fileset> 
</delete> 
</target> 
+0

이것은 내가 원하는 것입니다. 고맙습니다. – adarliu

+0

도와 줘서 기쁩니다! 통상적 인 방법은 그것을 지워서 답을 수락하는 것입니다 (http://stackoverflow.com/faq#howtoask 참조). 그것은 다른 사람들이 미래에 답을 찾도록 돕습니다. – DoctorRuss

0

이전에 개미를 사용해본 적이 없지만 A에서 복사 한 파일에는 현재 타임 스탬프가 포함되어있을 것입니다. 해당 타임 스탬프가있는 B에서 모든 파일을 삭제하면 A 파일 만 가져와야하며 Linux가 가진 문제점에주의하십시오. 즉, 여러 가지 타임 스탬프가 다른 사물에 대해, 그리고 만약 당신이 하나를 변경하지만 다른 사람을 복사합니다.

그래도 작동하지 않으면 A에있는 파일의 소유자를 복사하기 전에 특수 소유자로 설정할 수 있습니다. 그런 다음 B에서 해당 소유자의 파일을 모두 삭제하십시오. 어떤 솔루션을 사용하더라도 데이터의 일부가 B 파일 (이름 또는 소유자 또는 타임 스탬프)과 A 파일을 구별한다는 사실에 달려 있습니다. 일관된 차이가 없으면 하나를 만들어야합니다.

+0

글쎄, 난 나중에 파일을 변경 한 경우 작동하지 않습니다 타임 스탬프는 A에서 파일 및 B를 구별. B에서 이름으로 파일을 삭제하고 싶습니다. 어쨌든 고맙습니다. – adarliu

관련 문제