¿Cómo hago los directorios en un archivo zip en relación con el directorio de destino en lugar de mi directorio de trabajo

25

Llamo al comando zip desde un script donde no puedo cambiar el directorio. Necesito hacer un archivo zip de las cosas data/kit123/desde el directorio en el que residen los datos, pero quiero que el contenido del zip solo sea el contenido de kit123, con rutas relativas a kit123.

Esta es la estructura del directorio.

myworkingdir
    data
        kit123
            kitpart1
                file.xcf
                anotherfile.xcf
            kitpart2
                ...
        kit124
            ...

Mi script se ejecuta en myworkingdir y no puede cambiar los directorios.

Si llamo

zip -r kit123.zip data/kit123

entonces la estructura en el archivo zip será

data
    kit123
        kitpart1
            file.xcf
            anotherfile.xcf
        kitpart2

pero quiero que sea

kit123
    kitpart1
        file.xcf
        anotherfile.xcf
    kitpart2

¿Existe una opción de zip que pueda usar para lograr esto? Parece extraño que dependa de mi directorio de trabajo

Sé que no es -j. ese destruye la estructura dentro del kit123

Nathan
fuente
Bah, no importaba cómo descubrí cómo cambiar el directorio (en Python), solo tenía permisos mal organizados. Sin embargo, todavía me gustaría saber si zip tiene esa opción.
Nathan
Python lo zipfile.write(arcname=permite por cierto: docs.python.org/3.6/library/zipfile.html#zipfile.ZipFile.write
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Respuestas:

18

Como observa en los comentarios, ahora sabe cómo cambiar el directorio con su script, explicaré la situación con zip con respecto a las rutas relativas.

Es probable que sea más fácil de abrir terminal y cda kit123; tiene que hacer que el directorio de destino sea su directorio de trabajo: no puede ejecutar el comando desde la base de su directorio de inicio o tomará todas las rutas de /home/$USER/..Si usa la -jopción, eliminará todas las rutas, ya que no hay No es realmente un equivalente de la opción tar --stripcon la que se pueden especificar diferentes niveles de eliminación de ruta.

Entonces, cd a su directorio objetivo ( kit123) e ingrese:

zip -r kit123.zip *

Esto -rconservará de forma recursiva ( ) todos los *archivos ( ) y directorios de archivos en el directorio actual ( kit123), y como las rutas relativas ( -p) se conservan automáticamente a menos que la -jopción esté presente, la estructura del directorio será la deseada. Kit123y subcarpetas ( kitpart1) con sus propios archivos estarán presentes:

kit123
    kitpart1
        file.xcf
        anotherfile.xcf
    kitpart2

Puede verificar el contenido del archivo zip con unzip -l zipfile.zip.

Para obtener más información sobre las otras opciones disponibles zip, consulte man zipy la página de manual de Ubuntu en línea .


fuente