Tutoriales

Cómo encontrar cadenas en un archivo tar.gz de Linux

El archivado es otro aspecto importante de la administración de archivos de Linux, ayuda a organizar y administrar archivos relacionados con proyectos, también ahorra espacio en disco, permite que el sistema operativo Linux contenga más archivos y mejora el rendimiento.

Para usuarios experimentados de Linux, un archivador de archivos común es GNU alquitrán Archiver, que no solo nos permite almacenar varios archivos en un solo archivo, sino que también otorga a los usuarios de Linux privilegios para operar en el mismo archivo.

Sin embargo, el propósito de este tutorial es explorar las posibilidades ya existentes de grepping Archivo expediente.

Para esta guía, no nos interesará lo que el comando grep tiene para ofrecer, ya que busca principalmente archivos de entrada ordinarios para patrones específicos de acuerdo con la referencia de sintaxis a continuación.

$ grep [OPTION...] PATTERNS [FILE...]

Necesitaremos una utilidad con versión grep para trabajar con archivos comprimidos o archivados.

planteamiento del problema

Para hacer este tutorial interesante, vamos a crear el nuestro propio tar.gz Archivar utilizando el comando tar de Linux. Considere el siguiente directorio raíz con los archivos dir1, dir2 y systemlog.txt.

$ tar czf dir_logs.tar.gz dir1 dir2 systemlog.txt 

Deberíamos verificar que el tarball fue creado correctamente.

$ tar tzf dir_logs.tar.gz
Validar archivos Tar

Ahora, por ejemplo, supongamos que acabamos de descargar este archivo de la web o de Internet y queremos consultar qué archivos de este archivo contienen una entrada de cadena como «No se encontró el recurso solicitado«.

Un enfoque sencillo es extraer primero todos los archivos tarball, unir los archivos extraídos individualmente y finalmente recuperar los archivos con la información correspondiente.

Sin embargo, esta solución no se recomienda en el mundo real, ya que es posible que tenga que lidiar con archivos tar más grandes con una cantidad infinita de archivos sin procesar extraídos.

Consultar dichos archivos individualmente para buscar coincidencias de cadenas puede llevar una cantidad de tiempo irrazonable e incluso aumentar significativamente la carga de E/S del disco.necesitamos una manera de buscar tar.gz Archive sin extraer todos sus archivos, pero solo aquellos con búsqueda de cadena coincidente.

Usando el comando zgrep en Linux

Según su página man (man zgrep), es una utilidad basada en grep que se puede usar para consultar el contenido de archivos comprimidos/archivados en función de una expresión regular especificada por el usuario.

Este zgrep Solucionar nuestro problema de cadena de consulta»No se encontró el recurso solicitado» en el interior dir_logs.tar.gz Archivado a continuación.

$ zgrep -Hai 'Requested resource not found' dir_logs.tar.gz
Buscar una cadena en un archivo Tar
Buscar una cadena en un archivo Tar
  • -H Los nombres de los archivos de salida coinciden.
  • -a Sobre todos los archivos binarios y de texto.
  • -i Ignorar las distinciones de casos.

Se encontró nuestra cadena de consulta, pero como puede ver, esta solución no recupera el archivo asociado con la cadena de consulta.

Pasemos a otra solución.

Use tar con el indicador –to-command

Para encontrar nombres de archivos relacionados con una coincidencia de cadena de una consulta, primero debemos extraer estos archivos para salida estándar Soluciona el problema de carga de E/S de disco adicional.Este --to-command Las opciones hacen posible este enfoque.

Considere la siguiente implementación alquitrán Ordenar:

 
$ tar xzf dir_logs.tar.gz --to-command='grep --label=$TAR_FILENAME -Hi "Requested resource not";true' 

pudimos grep tar.gz expediente($TAR_NOMBRE DEL ARCHIVO) para la cadena «El recurso solicitado no es” y recuperar el nombre de archivo asociado (-H) e ignorar la distinción de mayúsculas y minúsculas (-i).

Buscar cadenas en archivos Tar
Buscar cadenas en archivos Tar

Como puede ver, hemos hecho coincidir con éxito la cadena que buscamos y el nombre de archivo asociado con ella.

Deberíamos poder extraer el archivo que nos interesa en lugar de todo el archivo.

$ tar tzf dir_logs.tar.gz
$ tar --extract --file=dir_logs.tar.gz systemlog.txt

Este ls -lu El comando confirma que acabamos de empezar desde tar.gz expediente.

$ ls -lu systemlog.txt  
Extraer archivos de archivos Tar
Extraer archivos del archivo Tar

Ahora deberíamos poder grep fácilmente tar.gz Archivar archivos en Linux. Espero que este artículo te ayude. Como siempre, sus comentarios y opiniones serán muy apreciados.

LEER  Conoce a Clapper: un elegante reproductor de video Linux para minimalistas

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Botón volver arriba