Cómo buscar nombres de directorio recursivamente en Linux

Concha de golpe

Todo en Linux se almacena en directorios y, al escribir scripts de bash, suele ser útil buscar directorios por nombre. Por suerte, puedes usar el find Comando para buscar recursivamente nombres de directorios y mostrar coincidencias.

Búsqueda de directorios

los find El comando se usa para buscar a través de directorios en Linux. De forma predeterminada, es completamente recursivo, por lo que buscará en todos los subdirectorios para encontrar coincidencias.

Si usas el -type d bandera, find operará en «modo de directorio» y solo buscará directorios, sin coincidir con ningún archivo. Puedes usarlo junto -name para buscar directorios por nombre:

find . -type d -name "search"

Este comando comienza en el directorio actual pero también puede buscar en otros directorios como ~.

El problema con el uso -name es que solo coincidirá con los nombres directos, lo que significa que fallará a menos que coincida con el nombre completo del directorio. Sin embargo, puede usar comodines para resolver esto, y colocar un comodín antes y después de la cadena de búsqueda coincidirá con la subcadena en cualquier parte del nombre del directorio. Si también incluye nombres de archivo, puede usar comodines para hacer coincidir los archivos que terminan en una extensión particular

find . -type d -name "*search*"

Sin embargo, esto solo coincidirá con el nombre del directorio y seguirá ignorando el directorio principal. Si desea hacer coincidir usando la ruta completa del archivo, deberá usar la opción Regex que se describe a continuación.

find imprimirá una lista de todos los directorios que coincidan, pero querrá tener cuidado para asegurarse de ser consistente al usar rutas absolutas o relativas, ya que afectará la respuesta final. Si usa una ruta relativa, como el período para el «directorio actual», las respuestas serán relativas. Pero si especifica la ruta directamente, incluso si es el directorio actual, la ruta será absoluta, comenzando en la raíz.

find también hace más que solo buscar texto: se puede usar para hacer coincidir archivos según las marcas de tiempo, los tamaños de archivo y otros identificadores de Linux. También se puede utilizar con -exec para ejecutar comandos en cada archivo o directorio.

RELACIONADO: Cómo usar el comando de búsqueda en Linux

Buscando con Regex

También puede utilizar un filtrado más avanzado con findusándolo con expresiones regulares (Regex) para encontrar coincidencias para consultas de búsqueda complejas.

Un beneficio importante de usar Regex es que coincidirá con todo el directorio, incluidos los directorios base que conducen a.

Puedes usar Regex con -regex en lugar de -name. También ayuda a encender sedRegex compatible usando -regextype sed.

encontrar . -tipo d -regextype sed -regex “.*one/.*”

En este ejemplo, la expresión regular comienza con .*one para que coincida con todos los directorios que terminan en «uno». El punto y el comodín coincidirán con cualquier subcadena que conduzca a esto. Entonces la barra diagonal se escapa con / para que coincida con el final del directorio y luego otro comodín para que coincida con cualquier nombre de directorio.

En general, esto coincidirá con cualquier directorio cuyo padre termine con «uno», en cualquier lugar, incluso en los subdirectorios. Regex es poderoso, y querrá tener cuidado de que el suyo coincida exactamente con lo que quiere que haga, ni más ni menos.

Usando grep con buscar

Ya que find también puede generar una lista sin procesar de directorios, se puede canalizar a otros comandos para su procesamiento. Por ejemplo, grep se usa como una utilidad de búsqueda de texto y se usa rápidamente en la línea de comando para buscar y resaltar de manera simple.

find . -type d | grep foo

grep también es una utilidad de búsqueda completa por sí misma y se puede usar con herramientas como expresiones regulares para mejorar la búsqueda. Puede leer nuestra guía para usarlo para obtener más información.

RELACIONADO: Cómo usar el comando grep en Linux

Deja un comentario

En esta web usamos cookies para personalizar tu experiencia de usuario.    Política de cookies
Privacidad