Puede que seas un hacha con el comando find o incluso con locate; pero hay veces que nuestro software tiene que ser capaz de realizar la búsqueda de un archivo en el árbol de directorios, puede que queramos hacer inclusiones, exclusiones, o analizar las características del archivo.
Podemos tener varias misiones, por ejemplo calcular el tamaño que ocupan todos los archivos a partir de una ruta dada (como hace du -s), copiarlos a otra ruta como haría un gestor de archivos o, incluso buscar archivos repetidos. Lo que todos estos programas tienen en común es que exploran los archivos contenidos dentro de un directorio de manera recursiva, y esto es que si encontramos un directorio entramos en él y repetimos la operación.
Llegará un punto en el que no encontraremos más directorios, sólo archivos. En ese caso, hacemos lo que tengamos que hacer con ellos, y salimos de la función. El caso es que, como en todos los algoritmos recursivos, si entramos 15 veces dentro de la función, tendremos que salir otras 15 veces hasta que nuestro caso base se cumpla en todas las ejecuciones de la función.
En el caso de los archivos, siempre se va a cumplir, el número de archivos en el sistema es limitado, a no ser que encontremos un directorio que se contenga a sí mismo, haya alguna inconsistencia en disco o estemos realizando una operación no válida. De todas formas, podemos limitar la recursividad (el número de ejecuciones que podrá haber de una función, o el número de directorios dentro del directorio base en el que podremos entrar).
Aunque hace años ya publiqué un código parecido voy a extender un poco los ejemplos por petición de varios usuarios por Facebook.
Buscando un archivo
Con este programa sólo tendremos que hacer: