Como buscar archivos en Linux por nombre o contenido

Imagen
Search con piezas de Scrabble

Una tarea normal para cualquier usuario de la línea de comandos de Linux, es tener que buscar dentro de directorios archivos con un nombre o que contenga cierto texto.

Son dos comandos que fácilmente recordaremos en cuando los usemos unas pocas veces, pero que resultan muy útiles:

Buscar archivos por nombre:

Para realizar esta búsqueda, tenemos que utilizar el comando “find”, y tenemos que poner la ruta en la que buscar, y luego el parámetro. En este ejemplo vamos a buscar dentro de /var/www los archivos que contentan en el nombre la extensión .css (el asterisco * es un comodín).

$ find /var/www -name '*.css'

Esto nos mostrara los resultados con la ruta de los archivos que cumplan los requisitos, por ejemplo, la salida podría ser algo asi:

/var/www/html/text-cursor.css
/var/www/html/style.css

Este es un uso básico, que si queremos algo más avanzado, podemos consultar el manual y ver todas las opciones que tenemos disponibles:

$ man find

Buscar archivos por el texto que contienen:

En esta ocasión utilizaremos el comando grep, es un comando con mucha utilidad, pero en esta ocasión veremos únicamente como buscar un texto dentro de archivos.

En este ejemplo, vamos a buscar la palabra “front” dentro de un un archivo:

$ grep Font /var/www/html/style.css

Esto nos mostrara todas las líneas que coincidan con lo que hayamos buscado. En este caso al ser un archivo css, podría mostrar un resultado como lo siguiente:

font-weight: bold;
font-family: monospace;

Veamos un ejemplo mas, ahora vamos a buscar dentro de un directorio, a si que ejecutamos el siguiente comando:

$ grep Font /var/www/html/

Pero si lo ejecutamos, obtendremos una respuesta como la siguiente:

Grep: /var/www/html/: Is a directory

Esto nos quiere decir que al ser un directorio, no puede buscar un contenido en el, a si que tenemos que indicarle que busque de forma recursiva para poder buscar dentro en todos los archivos que existan:

grep -R font /var/www/html/

Ahora si que nos mostrara un resultado en caso de que encuentre algo, nos indicara el nombre de archivo y donde lo ha encontrado, lo siguiente podría ser una salida:

/var/www/html/admin/index.php: echo '<font color=red><b>Error: no dice</b></font><br/>';
/var/www/html/admin/index.php: echo '<font color=red><b>Error: try again</b></font><br/>';
/var/www/html/style.css: font-weight: bold;
/var/www/html/style.css: font-family: monospace;

Si no queremos que nos muestre la ruta del archivo, podemos usar la opción -h para omitir esa opción. Si queremos mas información sobre el comando “grep” podemos obtenerla con “man”:

$ man grep