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 find
comando, 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