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.
unzip
no crea un directorio. Su archivo zip probablemente tenga el directorio en su nivel superior.mv
lugar decp
.mv archive/* .; rmdir archive/
o similar.Respuestas:
Mi versión de
unzip
tiene una-j
opció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
zip
archivo.Si solo desea eliminar un nivel de directorios del archivo (extraer
myarchive/dir/file
comodir/file
, nofile
), puede usarbsdtar
(que admitezip
archivos además detar
archivos) en su lugar y su-s
opción.fuente
-j
la 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/f2
yzip/A/B/C/f3
terminarí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.zip
fuente
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
-j
opción con-d
opción de esta manera :o para tu caso
fuente
Si realizar
unzip myarchive.zip
produce un directoriomyarchive
con 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 -R
y porque no estás usando,ls -a
no estás mostrando si hay archivos de puntos; ahora, ¿qué sucede cuando corresrm -R
y 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?rmdir
se aseguraría de que esté vacío primero ... Pero si el usuario no sabe acerca de los archivos de puntos, los confundiría.