Cómo grep para buscar nombres de archivos en lugar de contenido en Linux

Cómo grep para buscar nombres de archivos en lugar de contenido en Linux

grep es una herramienta de Linux comúnmente utilizada para buscar archivos de texto para contenido específico. Sin embargo, a menudo es útil buscar en los directorios los nombres de los archivos en lugar del contenido de los archivos, y esto se puede hacer usando grep otras utilidades de línea de comandos de Linux.

Usando find en lugar de grep

La utilidad grep esencialmente toma la entrada de cadenas de los archivos o la entrada estándar y usa patrones o una expresión regular para buscar a través de ellos y generar cadenas coincidentes.

Técnicamente, puede usarlo grep para buscar nombres de archivos en lugar de contenido, pero eso es solo porque Linux permite comodines en la entrada de nombres de archivos. Sin embargo, puede ls enumerar archivos de esta manera con la misma facilidad, o usar comodines en cualquier otro comando, y no es una solución real para encontrar nombres de archivos como grep la búsqueda de contenido.

grep "". /file* -l

La solución real es usar una find utilidad que pueda buscar en subdirectorios y proporcione la forma más confiable de encontrar archivos porque interactúa directamente con el sistema de archivos. Es la utilidad de búsqueda de directorios más utilizada y tiene muchas opciones, incluida la coincidencia de patrones y la compatibilidad con expresiones regulares.

El uso más simple es usarlo find solo para enumerar archivos que incluyen subdirectorios y canalizar esa entrada a grep. Si ya tiene scripts que usan grep, será bastante fácil convertirlos para que coincidan de esta manera.

find | grep "file"

También puede usar plantillas directamente con find, eliminando la necesidad de grep. Uso -iname con entrada.

find. -iname 'file_*.txt'

grep Sin embargo, a diferencia de este findcomando, es un poco más estricto: debe usar comillas simples o dobles para escapar de la cadena de búsqueda y debe usar comodines para hacer coincidir la cadena completa. No es posible realizar una búsqueda simple de una subcadena en un nombre sin usar comodines para hacer coincidir el resto del nombre.

Uso de expresiones regulares (Regex) con find

También puede usar expresiones regulares con find, lo que permite coincidencias mucho más complejas:

find. -regex './file.*'

Esta expresión regular coincidirá con todos los archivos en el directorio actual, comenzando con «archivo». Sin embargo, es importante saber que esto funciona de manera diferente a -iname; la entrada incluye la ruta completa al directorio y debe usarse ./ para escapar de la ruta relativa,  ./.

El comando que se muestra aquí excluye la ./subdirectory/ carpeta porque no comienza con «archivo». Para solucionar esto, debe hacer coincidir todo lo que lleva a la última barra inclinada con .*/:

find. -regex '.*/file.*'

Las expresiones regulares son muy complejas, pero muy poderosas. Si quieres saber más, puedes leer nuestra guía sobre cómo funcionan.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *