Cómo buscar nombres de directorio recursivamente en Linux
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 find
usá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 sed
Regex compatible usando -regextype sed
.
encontrar. -tipo d -regextype sed -regex ". * uno /.*"
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
Descubre más contenido