2016-10-03 1 views
1

Я хочу разархивировать файл, но если какой-то файл существует, это не должно быть заменено.No overwrite on Ant UNZIP

Я попытался это:

<unzip src="compress.zip" dest="dirTo" overwrite="false"> 
<patternset> 
    <include name="dirFrom/**"/> 
</patternset> 

"dirFrom", это имя из каталога в файле компресса, что я хочу, чтобы извлечь. Я использую «переписывать» значение false, но он не работает, и он оверлит.

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

ответ

1

Я нашел, как это сделать.

1-й, я извлекаю все в справочную директорию. 2nd, я делаю цикл, чтобы сравнить файл по файлу, если этот файл существует. 3rd, Если файл не существует, я его скопирую.

<unzip src="compressFile.zip" dest="dirAux"> 
    <patternset> 
     <include name="mySubDir/**"/> 
    </patternset> 
</unzip> 

<fileset id="fileset1" dir="dirAux/mySubDir" /> 
<property name="newContentMySubDir" refid="fileset1"/> 

<for param="nameFile" list="${newContentMySubDir}" delimiter=";"> 
    <sequential> 

     <if> 
      <not><available file="${finalDir}/mySubDir/@{nameFile}" type="file"/></not> 
      <then> 
       <copy tofile="${finalDir}/mySubDir/@{nameFile}" file="dirAux/mySubDir/@{nameFile}"/> 
      </then> 
     </if> 

    </sequential> 
</for> 
+0

Хорошо, что должно работать, но оно использует библиотеку ant-contrib. Кстати, я думаю, что мое решение тоже работает, не так ли? –

+0

Извините, это не сработало для меня. Я попробовал, но это не сработало. Он переписывал все. –

+0

Странно, я проверил, и он работает для меня ... Приятно, что вы нашли обходной путь ... –

0

Установка overwrite в false приведет только к тому, чтобы перезаписать файл назначения, если он является более новым, чем исходный файл. Для более сложной фильтрации вам необходимо использовать задачу copy с zipfilset, как объясняется в документации муравьев (см. Раздел unzip - в разделе Related tasks). Для Exemple, следующий код не должен извлекать файлы из архива, если они уже существуют в каталоге назначения (уважая исходные каталоги макет):

<copy todir="${target.dir}"> 
    <zipfileset src="${zip.file}"> 
     <patternset> 
      <include name="**/*.*"/> 
     </patternset> 
     <present targetdir="${target.dir}" present="srconly"/> 
    </zipfileset> 
</copy> 
+0

Спасибо, но это не сработало. Я изменил «

+0

Да, моя ошибка, вы должны использовать атрибут 'src' для zipfileset, я поправлю свой пример. Приведенный выше пример работает только в том случае, если файлы находятся в той же структуре, что и в zip-файле: например, это предотвратит запись файла «META-INF/MANIFEST.MF» тогда и только тогда, когда файл '$ {target.dir}/META-INF/MANIFEST.MF' присутствует. –