2012-03-14 11 views
15

Estoy intentando crear un archivo zip y quiero conservar la mayor parte de la estructura de directorios, pero no el rootdir como se define desde la línea de comandos. El comando que estoy usando es:Cómo crear un archivo zip sin toda la estructura de directorios

zip -r out.zip /foo/bar/ 

me gustaría que a través recursivo bar y añadir todos los archivos con la estructura de directorios conservado (que lo hace). Sin embargo, no quiero que 'foo' sea el directorio de nivel superior en el archivo zip creado. Me gustaría que bar sea el directorio de nivel superior.

¿Hay alguna manera fácil de hacerlo? Me doy cuenta de que podría cambiar directorios antes de comprimir para evitar el problema, pero estoy buscando una solución que no lo requiera.

Respuesta

8

No creo que zip tenga una forma de excluir el directorio de nivel superior. Creo que tu mejor opción sería hacer algo como: pushd/foo; zip -r out.zip ./bar; popd;

Pero este es exactamente el tipo de respuesta que dijiste que no querías.

+2

Dudo 'tar -C/foo/bar -c out.tar *' lo hace más feliz. –

+1

En segundo lugar esto. Estoy en un mac y necesito zip y no tar.gz. pushd parece una muy buena alternativa. – slott

8

Esto debe hacerlo:

cd /foo/bar/ 
zip -r ../out.zip * 

El archivo estará en /foo/out.zip

+1

El OP dijo que no quiere cambiar directorios. – Amala

+0

Esta respuesta hace exactamente lo que quiere el OP. Debería haber sido la respuesta aceptada. – Jason

+0

Estoy ejecutando zip en un script PHP. ¿Ahora que? –

-1

Si alguien tropieza con esto y no está satisfecho con la solución anterior, aquí sigue una muy simple solución para no comprimir subdirectorios largos. Se trata de crear temporalmente una carpeta en C: /, y después de comprimir simplemente eliminarlo:

ZipFiles <- list.files(".../ZipFiles") # Insert your long subdirectory into .../ 

dir.create("C:/ZipFiles") 
dir.create(".../FolderToBeZipped") 
file.copy(from = ZipFiles,to = "C:/ZipFiles") 
zip(".../FolderToBeZipped", 
    files = "C:/ZipFiles") 
unlink("C:/ZipFiles",recursive = TRUE) 

El resultado entonces es: .../FolderToBeZipped.zip/ZipFiles/

La ventaja es que no se necesita estar dentro del subdirectorio (o proyecto) al ejecutar el código.

Cuestiones relacionadas