2010-03-02 4 views
9

J'écris un fichier build.xml ant qui effectue les opérations suivantes:Conserver les autorisations de fichier lors décompressé et les fichiers en utilisant comme un éclair fourmi

  • Prend un dossier compressé (.zip)
  • décompresse il
  • Ajoute un certain nombre de fichiers
  • Zips les fichiers résultants

un extrait du code de build.xml:

Tout cela fonctionne parfaitement, sauf que les permissions définies pour les fichiers zippés avant d'exécuter la construction ant sont perdues dans le fichier zip créé par la construction ant. Par exemple, les fichiers qui étaient auparavant exécutables ne le sont plus.

Donc ma question: est-il possible d'utiliser ant pour ajouter des fichiers à une archive zip sans détruire les permissions des fichiers déjà présents?

J'utilise Ant 1.7.1

Répondre

3

Il s'avère que ant détruira toutes les informations sur les autorisations lors de la décompression en raison d'une restriction en Java. Cependant, ce qui est possible est d'ajouter des fichiers dans un fichier zip existant qui préserve les permissions des fichiers existants:

<!-- Add to zip --> 
<zip destfile="${existingZipFiledirectory}.zip" 
    basedir="${directoryOfFilesToAdd}" 
    update="true" 
/> 

Le script ci-dessus mettra à jour le fichier zip spécifié avec le contenu en basedir, en conservant les autorisations de fichiers dans le zip d'origine.

-1

Pour autant que je sache, cette fonction (preserve0permissions) a été introduit avec Ant 1.8. Les versions précédentes de Ant n'ont pas conservé les permissions.

Si vous êtes bloqué avec Ant 1.7.1, vous pouvez utiliser Tar qui stocke les autorisations, si je ne me trompe pas.

+1

Non, 'preserve0permissions' est différent, c'est à dire dans le cas où vous ajoutez des entrées à un fichier zip d'un autre (en utilisant' '). Ant a toujours été capable de copier les permissions d'un zip à un autre, mais avant Ant 1.8 si le fichier zip source avait une valeur nulle dans le champ permissions pour une entrée donnée, l'entrée dans le fichier cible serait toujours créée avec les permissions par défaut (typiquement 644 ou 755). 'preserve0permissions =" ​​yes "' conservera à la place la valeur zéro dans le fichier zip cible. –

7

j'ai rencontré même problème lors de l'utilisation cible dézipper Ant:

<unzip src="${project.build.directory}/${project.build.finalName}.zip" dest="${user.home}/apps" overwrite="true" /> 

L'autorisation des scripts shell à l'intérieur du fichier zip a été perdu lors de l'utilisation de la cible dézipper ci-dessus.

Après quelques recherches, j'utilise la commande 'exec' ant avec les paramètres de ligne de commande unzip, cela a fonctionné.

<!-- Use command line unzip to keep file permissions --> 
<exec executable="unzip" spawn="true"> 
    <arg line="-o ${project.build.directory}/${project.build.finalName}.zip -d ${user.home}/apps" /> 
</exec> 

J'espère que cela peut aider quelqu'un d'autre lorsque vous rencontrez ce genre de problèmes.

Merci, J

+0

Cela décompresse votre fichier zip et vous avez les mêmes autorisations que vous avez fait quand il a été compressé? – fscore

+0

Oui, je le pense. –

6

Vous ne pouvez pas obtenir la tâche zip pour préserver les permissions de fichiers, mais vous pouvez les définir explicitement:

<zip destfile="installer.zip" > 
<zipfileset filemode="755" dir="../" includes="artisan/install.*" /> 
</zip> 

(Cela a fonctionné pour moi sur Windows et Mac OS X)

+0

Cela fonctionne aussi sous GNU Linux, je viens de tester avec Mageia Linux 4. Merci. – gouessej

Questions connexes