2010-11-18 6 views
7

Chcę utworzyć cel Ant, który kopiuje pliki w katalogu do katalogu docelowego o tej samej strukturze folderów plus jeden dodatkowy podfolder dołączony.Używanie programu odwzorowującego i zestawu plików do kopiowania plików do innego podkatalogu?

Na przykład źródłem jest:

a/b/c/foo.pdf 
d/e/f/bar.pdf 

Chcę być docelowy:

a/b/c/x/foo.pdf 
d/e/f/x/foo.pdf 

Oto mój cel do tej pory, ale to nie wydaje się być cokolwiek:

<copy todir="${dest.dir}"> 
    <fileset dir="${src.dir}" casesensitive="yes"> 
     <include name="**${file.separator}foo.pdf" /> 
    </fileset>  
    <mapper type="glob" 
      from="foo.pdf" to="x${file.separator}foo.pdf" />    
</copy> 

Czego mi brakuje?

Odpowiedz

11

Można użyć regexp mapowania:

<copy todir="${dest.dir}"> 
    <fileset dir="${src.dir}" casesensitive="yes"> 
     <include name="**/*.pdf"/> 
    </fileset> 
    <mapper type="regexp" from="^(.*)/(.*\.pdf)" to="\1/x/\2" /> 
</copy> 

mam używany ciężko kodowanych file.separators skrócić. Zasadniczo podzielisz ścieżkę do pliku wejściowego (z) na katalog i nazwę pliku (przechwytuj \1 i \2), a następnie wstaw dodatkowy element między nimi (do).

Nie jestem pewien na twoim przykładzie - wygląda na to, że chcesz dopasować "bar.pdf" i zmienić jego nazwę na "foo.pdf", a także zmienić katalog. Jeśli musisz to zrobić, możesz rozważyć łańcuchowym kilka prostszych mappers regexp, zamiast próbować gotować jeden złożony:

<copy todir="${dest.dir}"> 
    <fileset dir="${src.dir}" casesensitive="yes"> 
     <include name="**/*.pdf"/> 
    </fileset> 
    <chainedmapper> 
     <mapper type="regexp" from="^(.*)/(.*\.pdf)" to="\1/x/\2" /> 
     <mapper type="regexp" from="^(.*)/(.*\.pdf)" to="\1/foo.pdf" /> 
    </chainedmapper> 
</copy> 

Przy zastosowaniu glob mapowania, trzeba podać jeden wieloznaczny * w z zakresu:

Zarówno do iz są wymagane i zdefiniować wzory, które może zawierać co najwyżej jedną *. Dla każdego pliku źródłowego, który jest zgodny z wzorcem , docelowa nazwa pliku zostanie skonstruowana z na wzór poprzez podstawienie * w do wzoru z tekstem, który dopasowuje * w wzorzec z. Nazwy plików źródłowych, które nie pasują do wzorca będą ignorowane.

więc coś takiego może działać:

<mapper type="glob" from="*/foo.pdf" to="*/x/foo.pdf" /> 
+0

Niestety, byłem kasował swoje nazwy plików do punktu w błąd. Obaj powinni zostać przemianowani na foo.pdf. W każdym razie pierwszy blok kodu zrobił to za mnie. Dziękuję Ci! Jakieś pomysły na to, dlaczego mój globplanet był błędny? – GJTorikian

+0

@ GJTorikian - Dodałem notatkę do globalnego programu odwzorowującego, hth. –

Powiązane problemy