¿Cómo usar 7z para archivar todos los archivos y directorios (incluidos los ocultos) en un directorio?


10

Debido a los detalles específicos de mis necesidades de archivo, no me siento cómodo con los archivos tar.gz sólidos y uso 7z en su lugar.

Yo uso el siguiente comando para hacer esto:

7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off ~/my/folder.7z ~/my/folder/*

Para crear un archivo de todo dentro ~/my/folder/como el ~/my/folder.7zarchivo.

Pero ~/my/folder/.hiddenFolderno entra en el archivo entonces. ¿Cómo arreglar esto? ¿No se *supone que debe devolver todos los archivos y carpetas?


Está utilizando la expansión de ruta bash por último *, intente eliminarla, 7z debería archivar todo el directorio.
enzotib

@enzotib pero no quiero el directorio en el archivo, solo lo que hay dentro. Y es por eso que etiqueté la pregunta bash: ¿tal vez estoy usando "expansión de ruta bash" de una manera incorrecta?
Ivan

Respuestas:


8

Si desea el contenido de un único directorio, un método fácil es cambiarlo primero:

cd ~/my/folder
7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off ~/my/folder.7z .

Lo que viste es que se *expande a la lista de nombres de archivos que no comienzan con a .. Ese es el comportamiento documentado, y es la razón principal por la que .se dice que los archivos cuyo nombre comienza con a están ocultos (el otro es que lsno los muestra por defecto).

No hay una forma portátil realmente conveniente de enumerar todos los archivos en un directorio. Puedes usar

~/my/folder/..?* ~/my/folder/.[!.]* ~/my/folder/*

pero si no hay un archivo que coincida con uno de los patrones, el patrón permanecerá sin expandir. En bash, puede configurar la dotglobopción para evitar tratar un líder .especialmente ( .y ..aún están excluidos de las coincidencias):

shopt -s dotglob
7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off ~/my/folder.7z ~/my/folder/*

En ksh, o en bash si configura la extglobopción (o en zsh si configura la ksh_globopción), puede escribir un patrón que coincida con todos los archivos excepto .y ..:

7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off ~/my/folder.7z ~/my/folder/@(..?*|.[!.]*|*)

En zsh, hay una manera más simple de decir que .no debe tratarse especialmente en un patrón:

7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off ~/my/folder.7z ~/my/folder/*(D)

9

TL; DR

7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off ~/my/folder.7z ~/my/folder/.

Más ejemplos

Ejemplo de estructura de directorios

test1
├── .hidden
└── normal.txt

0 directories, 2 files

Intenta seguir los comandos

  1. Carpeta raíz con todos sus contenidos.

    7za a test1_a.7z ~/test1/

    da

        Date      Time    Attr         Size   Compressed  Name
    ------------------- ----- ------------ ------------  ------------------------
    2017-08-06 09:23:51 D....            0            0  test1
    2017-08-06 09:23:44 ....A            0            0  test1/.hidden
    2017-08-06 09:23:51 ....A            0            0  test1/normal.txt
    ------------------- ----- ------------ ------------  ------------------------
    2017-08-06 09:23:51                  0            0  2 files, 1 folders
  2. Sin carpeta raíz y sin archivos ocultos

    7za a test1_b.7z ~/test1/*

    da

       Date      Time    Attr         Size   Compressed  Name
    ------------------- ----- ------------ ------------  ------------------------
    2017-08-06 09:23:51 ....A            0            0  normal.txt
    ------------------- ----- ------------ ------------  ------------------------
    2017-08-06 09:23:51                  0            0  1 files
  3. No hay carpeta raíz, pero se incluyen archivos ocultos (es lo que generalmente queremos)

    7za a test1_c.7z ~/test1/.

    da

       Date      Time    Attr         Size   Compressed  Name
    ------------------- ----- ------------ ------------  ------------------------
    2017-08-06 09:23:44 ....A            0            0  .hidden
    2017-08-06 09:23:51 ....A            0            0  normal.txt
    ------------------- ----- ------------ ------------  ------------------------
    2017-08-06 09:23:51                  0            0  2 files

Sí, acabo de probar esto y es mucho más ordenado que usarlo shopt.
será el

La mejor respuesta aquí. Gracias.
Marcin

4

No, *no se supone que devuelva todos los archivos. Solo devuelve los visibles.

La solución más fácil es:

cd ~/my/folder
7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off ~/my/folder.7z .
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.