Tengo un archivo myarchive.zip que contiene muchos directorios, archivos, etc. Digamos que este archivo myarchive.zip vive en un directorio llamado "b". Bueno, cuando uso el comando "descomprimir myarchive.zip", el sistema crea un directorio por defecto llamado "myarchive" con el contenido del archivo zip. Yo no quiero que el sistema cree este directorio "miarchivo" - Sólo quiero que el contenido se extraen en el directorio "b". es posible?
Lo que he estado haciendo ahora es simplemente emitir un comando "cp" para copiar los archivos del directorio recién creado (en este caso, "myarchive" a "b") donde los quiero.

unzipno crea un directorio. Su archivo zip probablemente tenga el directorio en su nivel superior.mvlugar decp.mv archive/* .; rmdir archive/o similar.Respuestas:
Mi versión de
unziptiene una-jopción para no crear ningún directorio.Asi que
Extraerá todos los archivos en el directorio actual sin restaurar la estructura de directorios almacenada en el
ziparchivo.Si solo desea eliminar un nivel de directorios del archivo (extraer
myarchive/dir/filecomodir/file, nofile), puede usarbsdtar(que admiteziparchivos además detararchivos) en su lugar y su-sopción.fuente
-jla estructura del directorio de archivo no se recrea y todos los archivos se depositan en la carpeta de extracción. Esto significa que TODAS las subcarpetas se descartan. Entonces, si lo hubiera hechozip/A/f1,zip/A/B/f2yzip/A/B/C/f3terminaría con una sola carpeta con f1, f2, f3. Se vuelve funky si tiene archivos con el mismo nombre en diferentes subcarpetas. Por lo general, solo desea soltar la carpeta superior, no toda la estructura del directorio.Parece que esto es realmente simple con bsdtar :
bsdtar --strip-components=1 -xvf file.zipfuente
Lo que la respuesta aceptada no especifica cómo hacer, como usted dice en la pregunta, si aún desea extraer a una carpeta específica sin usar las rutas de las carpetas almacenadas en los archivos zip, puede usar la
-jopción con-dopción de esta manera :o para tu caso
fuente
Si realizar
unzip myarchive.zipproduce un directoriomyarchivecon todo lo que contiene, eso significa que el creador del archivo zip realmente realizó zip en ese directorio.La única forma de crear lo que desea es mover todo el contenido fuera del directorio después de realizar
unzip:[user@host]:some/path/b$ unzip myarchive.zip[user@host]:some/path/b$ ls{ muestra el directoriomyarchive}[user@host]:some/path/b$ mv myarchive/* .[user@host]:some/path/b$ rm -R myarchive[user@host]:some/path/b$ ls{ muestra el primer nivel de myarchive (directamente enb) }fuente
mv myarchive/.* .para mover todos los archivos ocultos como .gitignore y .htaccess.rm -Ry porque no estás usando,ls -ano estás mostrando si hay archivos de puntos; ahora, ¿qué sucede cuando corresrm -Ry hay archivos de puntos? No los has copiado, así que están perdidos. Realmente deberías arreglar eso y tal vez explicar la diferencia porque es algo que hará tropezar bastante a los novatos; y considere esto: ¿qué pasa si no es un archivo que tienen? ¿O qué pasa si agregan al comando para eliminar el archivo una vez que está descomprimido?rmdirse aseguraría de que esté vacío primero ... Pero si el usuario no sabe acerca de los archivos de puntos, los confundiría.