Crear un archivo desde un directorio sin que el nombre del directorio se agregue al archivo


84

Tengo la siguiente estructura de carpetas:

  • raíz
    • carpeta1
    • carpeta2
    • carpeta3
    • 7za.exe

Quiero ejecutar la herramienta de línea de comando 7-zip para comprimir todos los archivos en folder1un archivo zip llamado folder1.zip.

Ejecutando lo siguiente

7za.exe a -tzip folder1.zip folder1\\*.*

produce un archivo zip como se esperaba. Sin embargo, cuando abro el archivo zip, tiene una carpeta llamada folder1, y dentro tengo todos los archivos que estaban dentro de esa carpeta. No quiero que se agregue el nombre de la carpeta a la carpeta zip, es decir, me gustaría agregar todos los archivos en un formato de archivo "Plano".

Tampoco quiero ejecutar recursivamente la herramienta de línea de comando para cada archivo / carpeta individual.

¿Hay un interruptor que proporcione esta funcionalidad?


¿Puedes cdingresar a la carpeta1 y 7za.exe a -tzip ..\folder1.zip *.*?
zpletan

Respuestas:


137

Del archivo de ayuda 7-Zip :

un comando (Agregar)

Agrega archivos al archivo.

Ejemplos

7z a archive1.zip subdir\

agrega todos los archivos y subcarpetas del subdirectorio de carpetas al archivo archive1.zip. Los nombres de archivo en el archivo contendrán subdir \ prefix.

7z a archive2.zip .\subdir\*

agrega todos los archivos y subcarpetas del subdirectorio de carpetas al archivo archive2.zip. Los nombres de archivo en el archivo no contendrán subdir \ prefix.

cd /D c:\dir1\

7z a c:\archive3.zip dir2\dir3\

Los nombres de archivo en el archivo c: \ archive3.zip contendrán dir2 \ dir3 \ prefix, pero no contendrán c: \ dir1 \ prefix.

Entonces el comando que querrías sería: 7za.exe a folder1.zip .\folder1\*

Además, preste atención al manejo de comodines por parte de 7-Zip. No se trata *.*como "todos los archivos", significa "todos los archivos con un punto en el nombre del archivo". Se perderán los archivos sin extensión. Si realmente quieres todos los archivos, solo *úsalos.

Finalmente, el -tzipparámetro no es necesario si el nombre del archivo finaliza .zip. 7-Zip es lo suficientemente inteligente como para determinar qué formato desea en esos casos. Solo es necesario cuando desea una extensión personalizada (por ejemplo, 7za.exe a -tzip foo.xpi <files>para un complemento de Mozilla).


2

Esto funciono para mi

Considere la estructura de carpetas como C: \ Parent \ SubFolders ..... Y desea crear parent.zip que contendrá todos los archivos y carpetas C: \ Parent sin carpeta padre [es decir, comenzará desde SubFolders .....]

cd /D "C:\Parent"

"7z.exe" a Parent.zip "*.*" -r

Esto creará Parent.zip en C: \ Parent


2
Esto duplica otra respuesta y no agrega contenido nuevo. No publique una respuesta a menos que realmente tenga algo nuevo que aportar.
DavidPostill

Bueno, mientras buscaba una solución, no obtuve exactamente esta solución. Obviamente no solo copiaré y pegaré algunas respuestas que encontré en línea. Dedico algo de tiempo a ello, así que sentí que debería compartirlo. Según mi opinión, puede encontrar esta respuesta exacta aquí y en Stack Overflow publicado por mí.
Pritesh Dhokchaule

Tenga en cuenta que 7-Zip no considera *.*que significa "todos los archivos" sino más bien "todos los archivos que tienen un punto como parte del nombre de archivo". Por lo tanto, esta respuesta omitirá realmente los archivos que no tienen una extensión (esto se observa en la respuesta aceptada).
Bill_Stewart

1

Solo para ampliar la respuesta aceptada (no pude agregar comentarios allí):

En Linux, agregar '*' no funcionó para mí, así que terminé inventando una línea de comando más detallada que dio el resultado deseado:

curr_dir=$(pwd); \ 
cd source_code/lambda/ ; \
7z a ../../lambda.zip .; \
cd $curr_dir \
unset curr_dir

===========

explicación del guión:

  • guardar la ruta de directorio actual para usarla más tarde;
  • navegar al directorio que necesita ser archivado;
  • crear archivo (aviso '.' (punto) al final);
  • volver al directorio original;
  • deshacerse de la variable que almacenaba la ruta del directorio original

Espero que pueda ser útil para alguien.


Sugeriría colocar las *comillas (de lo contrario, el shell lo expandirá a los archivos en este lugar).
Simon Sobisch

-1

Qué tal esto. por ejemplo, Carpeta / subcarpeta1, Carpeta / subcarpeta2

seleccione todas las subcarpetas> haga clic derecho y luego cree un archivo> seleccione cualquier formato

* El nombre del archivo sería la carpeta principal.

Simple derecho?


3
La pregunta es sobre la CLI para 7-zip, no cómo usar la GUI. Aprender a usar la GUI no tiene sentido cuando desea automatizar las cosas.
binki
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.