Hacer que el comando descomprimir de Linux simplemente extraiga archivos de directorios cuyos nombres contengan una cadena determinada

Hacer que el comando descomprimir de Linux simplemente extraiga archivos de directorios cuyos nombres contengan una cadena determinada

Tengo un archivo zip que contiene una jerarquía de directorios de archivos. Quiero usar el comando descomprimir de Linux para extraer solo el subconjunto de estos archivos que tienen una cadena particular en algún lugar de la ruta del directorio que conduce al archivo.

Por ejemplo, supongamos que el archivo foo.zip contiene estos archivos:

a/1.txt
acme/2.txt
a/acme/b/3.txt
a/b/acmenet/c/4.txt
a/b/c/5.txt
a/acme/d/6.php

El comando de Linux "unzip foo.zip *.txt" extraerá los 5 archivos "txt".

¿Cómo se puede modificar este comando de Linux para que solo extraiga los 3 archivos "txt" que tienen la cadena "acme" en algún lugar de la ruta del directorio (de modo que extraiga solo 2.txt, 3.txt y 4.txt)?

Respuesta1

Su ejemplo unzip foo.zip *.txtsolo funcionó porque no había ningún *.txtarchivo en su directorio de trabajo. De lo contrario, *.txt el shell lo habría expandido a los nombres de los archivos de texto en su directorio. Debe citarlo para estar seguro.

Como unzipusa globos, use

unzip foo.zip '*acme*/*.txt'

o incluso

unzip foo.zip '*acme*.txt'

Si no desea restaurar la estructura de directorio original y extraer los archivos al directorio de trabajo actual, agregue la opción -j:

unzip -j foo.zip '*acme*/*.txt'

información relacionada