2010-11-27 26 views
5

suponer quiero comprimir esta dir 〔c:/Users/Xah/ErgoEmacs_Source/ergoemacs/acumulación util /〕creando zip sin registrar las rutas de acceso raíz; programación

y mi Quiero que el directorio de salida para ser 〔c:/Users/Xah/xx2 /〕

(zip mi directorio actual podría estar en cualquier lugar. te llamo en un programa elisp) por lo que

zip -r c:/Users/xah/xx2/build-util.zip c:/Users/xah/ErgoEmacs_Source/ergoemacs/build-util/ 

entonces zip registrará la ruta completa como esta

adding: Users/xah/ErgoEmacs_Source/ergoemacs/build-util/ (stored 0%) 
adding: Users/xah/ErgoEmacs_Source/ergoemacs/build-util/.svn/ (stored 0%) 
adding: Users/xah/ErgoEmacs_Source/ergoemacs/build-util/.svn/all-wcprops (deflated 56%) 
... 

Quiero que las rutas simplemente comiencen con build-util.

nota: estoy llamando a zip en un programa (elisp) y no puedo ni quiero usar ningún concepto de variable de envirenment.

¿Esto es posible con algún parámetro zip?

+1

AFAIK no existe la opción de alquitrán -C para zip, por lo que tendrá que cambiar el directorio actual antes de ejecutarlo. – tokland

+0

hmmm ... 'cd c:/Users/xah/ErgoEmacs_Source/ergoemacs; zip ... ', esto da una ruta relativa, ¿es esto lo que necesitas? posible usando elisp? – ajreal

+0

gracias. Creo que tokland respondió. No quería grabar el dir primero, ese es el problema. –

Respuesta

4

Por extraño que parezca, su mejor opción puede ser utilizar el jar de Java JDK.

jar -cMf c: /Users/xah/xx2/build-util.zip -C c:/Users/xah/ErgoEmacs_Source/ergoemacs/build-util /.

"M" le dice a jar que no cree un archivo de manifiesto y que -C le dice que cambie de directorio antes de comenzar a comprimir los archivos. La documentación en la que basé esto está aquí: http://download.oracle.com/javase/tutorial/deployment/jar/build.html

+0

Por cierto, un archivo jar de Java es solo un archivo zip con algo de información manifiesta –

4

Una de mis funciones bash favoritas es pushd, guarda el dirrectorio en el que se encuentra actualmente y lo mueve al directorio que usted especifique. La función recíproca es popd, lo mueve de vuelta al directorio en el que estaba antes de pushd. Por ejemplo, usted hacer

pushd c:/Users/xah/ErgoEmacs_Source/ergoemacs 
zip -r c:/Users/xah/xx2/build-util.zip build-util/ 
popd 

Creo que terminan con lo que quieres.

Cuestiones relacionadas