Переместить содержимое динамической папки - PullRequest
1 голос
/ 31 мая 2011

У меня есть zip-файл, в котором есть одна базовая папка с другим содержимым. Я не всегда знаю, как будет называться эта базовая папка, пока я не разархивирую ее.

Я бы хотел переместить эту базовую папку и переименовать ее одновременно в ant - но не могу понять, как это сделать. Я написал код для извлечения содержимого zip-файла в ${local.sdk.dir}/temp/, но здесь я не могу понять, как переименовать / переместить извлеченную папку

<move todir="${local.sdk.dir}/${remote.sdk.file.name}">
  <fileset dir="${local.sdk.dir}/temp/<WHAT_DO_I_PUT_HERE?>"></fileset>
</move>

также пытался

<move todir="${local.sdk.dir}/${remote.sdk.file.name}" includeEmptyDirs="yes" verbose="true">
  <fileset dir="${local.sdk.dir}/temp/" >
     <include name="**/*" />
  </fileset>
</move>

и поиграл с этим, но самое близкое, что я могу получить, не выдавая ошибку ant, - это скопировать содержимое временного каталога, а не базовую папку внутри временного файла.

Ответы [ 2 ]

2 голосов
/ 01 июня 2011

Вы можете сделать все это за один шаг - скопировать из zip-файла и переименовать файлы, меняя имя каталога при копировании. Задача copy принимает вложенную коллекцию ресурсов , поэтому вы можете использовать zipfileset, чтобы указать файлы для копирования непосредственно из zip-файла.

Чтобы переименовать файлы по мере их копирования, вы можете использовать mapper , который задача copy также принимает в качестве вложенного элемента. В этом случае cutsdirmapper выглядит как инструмент для работы.

Итак, если я понял, что вы хотите сделать правильно, то что-то вроде этого должно работать:

<copy todir="${local.sdk.dir}/${remote.sdk.file.name}">
  <zipfileset src="${your.zip.file}" />
  <cutdirsmapper dirs="1" />
</copy>

cutdirsmapper доступен только в Ant 1.8.2 и более поздних версиях, поэтому, если вы используете более раннюю версию, вы можете попробовать regexpmapper:

<regexpmapper from="[^/]*(.*)" to="\1" />
0 голосов
/ 31 мая 2011

Похоже на этот вопрос

  <target name="relocate_sdk_folder">     
    <path id="sdk_folder_name">
      <dirset dir="${local.sdk.dir}/temp/">
        <include name="*"/>
      </dirset>
    </path>
    <property name="sdk_folder_name" refid="sdk_folder_name" />
    <echo message="renaming ${sdk_folder_name} to ${remote.sdk.file.name}" />
    <move file="${sdk_folder_name}" tofile="${local.sdk.dir}/${remote.sdk.file.name}" />         
</target>
...