¿Cómo enumerar el contenido de todos los archivos .zip en una carpeta y grep para un archivo específico?


28

Tengo 348 archivos zip y quiero encontrar un archivo que esté en uno de los archivos zip, unzip -l¿no funciona con comodines?

¿Cómo puedo enumerar el contenido de todos los .ziparchivos y grepmediante la lista combinada de todos los archivos contenidos en las cremalleras?

Respuestas:


17

Usar zipinfoes una buena solución aquí. Sin embargo, en general, siempre que desee aplicar un comando a una lista de archivos y el comando no acepte una lista de archivos, puede usar un forbucle:

for file in *.zip; do
    unzip -l "$file"
done \
| grep "\.zip\|setup"

Si el archivo que está buscando tiene espacios como:, your fileen la expresión regular grep, debe escapar de cada espacio con una barra diagonal inversa como grep "\.zip\|your\ file".


Funciona perfectamente, el único problema es que no muestra el nombre del zip,
Eduard Florinescu

Edité tu publicación y agregué expresiones regulares para mostrar también el nombre de archivo donde se encuentra la configuración, +1 y aceptar
Eduard Florinescu

Oh sí, había olvidado las citas sobre el argumento de unzip, qué vergonzoso.
Konrad Rudolph el

1
@JaySullivan No use este código, fallará para las rutas que contienen espacios. Nunca canalice la salida de ls. Usted podría utilizar finden su lugar.
Konrad Rudolph

12

Puedes usar zipinfo. Está incluido en la instalación predeterminada de Ubuntu. Consulte la página del manual para más información.

Por ejemplo, para buscar un patrón setupen un grupo de archivos zip en el directorio actual, use este comando:

find ./ -iname *zip 2> /dev/null -print0 | xargs -0 zipinfo | grep setup

Obtengo un caution: filename not matched: case1.zip... caution: filename not matched: case348.zippor cada zip, probado en dos sistemas operativos Ubuntu, 11.10 y 12.04.
Eduard Florinescu

@EduardFlorinescu Prueba la respuesta actualizada. Aunque la respuesta estaba funcionando para mí
Anwar

el problema es que el archivo puede contener eso setupy pone el mismo error, aunque funciona así:zipinfo -l * | grep "setup"
Eduard Florinescu

Edité la respuesta. Creo que es más robusto ahora
Anwar

1
Gracias, +1 por esfuerzo, pero aún así no funcionará si el archivo zip tiene espacios en su nombre.
Eduard Florinescu

6

Para enumerar los archivos en un archivo zip, puede usar el siguiente comando.

unzip -l

Para grep un archivo comprimido, debe utilizar las utilidades de archivo comprimido creadas para trabajar con ese tipo de formato de archivo.

Para archivos zip:

zipgrep --help  
usage: zipgrep [egrep_options] pattern zipfile [members...]
Uses unzip and egrep to search the zip members for a string or pattern.

Para archivos de alquitrán:

zgrep --help
Usage: /bin/zgrep [OPTION]... [-e] PATTERN [FILE]...
Look for instances of PATTERN in the input FILEs, using their
uncompressed contents if they are compressed.

OPTIONs are the same as for 'grep'.

Hay algunas otras herramientas que también funcionan con archivos. Puede colocar la salida en grep para hacer lo mismo.

zcat
zcat my.archive.zip | grep "some text"

O puede usar la funcionalidad de búsqueda de estas herramientas

zless
zmore
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.