GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo obtener una lista de directorios en un zip?

La herramienta de código abierto Zip_Dir_List enumerará todos los directorios por usted, incluso los archivos Zip que no tienen entradas de directorio explícitas. Desde el enlace, suba al repositorio y siga las instrucciones de compilación en readme.txt.


Para listar solo directorios:

unzip -l foo.zip "*/"

Salida (por ejemplo):

Archive:  foo.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2015-09-10 20:10   work/
        0  2015-08-31 10:45   work/test1/
        0  2015-08-31 10:50   work/test1/cc/
        0  2015-08-31 10:45   work/test1/dd/
        0  2015-08-31 10:45   work/test1/aa/
        0  2015-08-31 10:45   work/test1/bb/
        0  2015-09-09 21:17   work/tmp/
        0  2015-08-23 18:49   work/tmp/work/
        0  2015-09-08 19:33   work/tmp/work/loop/
        0  2015-08-15 16:00   work/tmp/work/1/
        0  2015-08-15 16:00   work/1/
        0  2015-08-24 18:40   work/dir/
        0  2015-09-05 18:07   work/rename/
---------                     -------
        0                     13 files

o usar

zipinfo -1 foo.zip "*/"

Salida (por ejemplo):

work/
work/test1/
work/test1/cc/
work/test1/dd/
work/test1/aa/
work/test1/bb/
work/tmp/
work/tmp/work/
work/tmp/work/loop/
work/tmp/work/1/
work/1/
work/dir/
work/rename/

Sobre Cygwin

No pude hacer que ninguno de estos funcionara en mi Cygwin. Para mi uso inmediato, donde solo necesitaba obtener un directorio profundo:

zipinfo -1 foo.zip | grep -o "^[^/]\+[/]" | sort -u

Para otros directorios, podría usar xargs en combinación con alguna otra cosa de análisis, algo como:

## PSEUDOCODE
$ zipinfo -1 foo.zip | \
# from the pipe, run 
xargs \
# do something like the following while loop, going one file at a time
while there is still a '/' in the line; do
  parse off "[^/]+([/]|)$" from the line
  print out the new line
done | \
sort -u

Información del sistema

$ uname -a
CYGWIN_NT-10.0 C-D-ENG-E-INT3 2.11.2(0.329/5/3) 2018-11-08 14:34 x86_64 Cygwin

$ bash --version
GNU bash, version 4.4.12(3)-release (x86_64-unknown-cygwin)
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

$ systeminfo | sed -n 's/^OS\ *//p'
Name:                   Microsoft Windows 10 Enterprise
Version:                10.0.17134 N/A Build 17134
Manufacturer:           Microsoft Corporation
Configuration:          Member Workstation
Build Type:             Multiprocessor Free

$

Puedes intentar canalizar unzip -l a awk así:

unzip -l foo.zip | awk '/\/$/ { print $NF }'

Todos los directorios en el unzip -l final de salida con una barra oblicua y $NF imprime solo la ruta del directorio.


Linux
  1. Cómo enumerar recursivamente todos los archivos y directorios

  2. ¿Cómo enumerar recursivamente los directorios en C en Linux?

  3. Cómo obtener el uso de la CPU

  4. ¿Cómo obtener la lista de imágenes de niños dependientes en Docker?

  5. ¿Cómo obtener elementos de la lista en bash?

Cómo comprimir archivos y directorios en Linux

Cómo cambiar el nombre de los directorios en Linux

Cómo obtener la lista de cuentas de usuario de MySQL en Linux

Cómo enumerar solo directorios en Linux

Cómo obtener una lista de enlaces simbólicos en Linux

Cómo crear archivos zip o directorios protegidos con contraseña en Linux