Problema con recursividad infinita en bash

Me han encargado la realización de un script para administrar el tamaño máximo de archivos en un sistema linux (compo practica de la carrera). El script debe recorrer el árbol de ficheros y eliminar los ficheros que excedan un determinado tamaño para así mantener un limite en el consumo de disco de los usuarios.
En principio hacer el script más básico fue fácil, recorriendo el árbol de ficheros recursivamente, ordenando por tamaños y borrando los que ocuparan más de POR Kbytes. El problema me surge cuando introduzco enlaces smbolicos, a ver si no me lio mucho al explicarlo
Si un directorio posee un enlace simbólico a otro directorio que esta por encima en el árbol de directorios (Es antepasado). Al entrar de forma recursiva en el enlace, se creara un bucle infinito ya que eventualmente de su antepasado se volverá al directorio con el enlace.
Luego pensé en recordar la ruta a la que llevaba el ultimo enlace visitado y si ya se había visitado no volver a hacerlo, pero a parte de que podría recorrer dos veces la misma rama, me surgió otro problema, que pondré en un esquema para que se entienda mejor.

Las flechas discontinuas representan los enlaces simbólicos.
Cuando recorro el subarbol de A, llego al nodo F que me devuelve a A y así sucesivamente. Si recuerdo el ultimo enlace visitado, al llegar a F no volveré a entrar, (aunque recorreré dos veces el mismo árbol y también es un problema) aun así suponiendo que recordar el ultimo enlace fuese válido, me surge el problema del nodo E, al llegar al nodo E recorro E->F y E es el ultimo enlace visitado, pero luego recorro el nodo F->A pasando a ser F el ultimo enlace visitado al volver a F no habría problema (salvo el de haber recorrido más de una vez, ya mencionado) pero cuando llegue a E, el ultimo enlace visitado seguirá siendo F por lo tanto sera válido E->F y posteriormente F->A
Bueno espero no haberme liado demasiado.

1 respuesta

Respuesta
1
Wow, suena complicado, pero se me ocurre que puedes jugar con el comando "du" ve los manuales en tu distribución, tiene muchas opciones, podría ser útil.
Buena suerte
Edgardo
¿Te sirvió lo que te comenté? ¿Terminaste lo que tenias que hacer?
Tu feedback sera bien apreciado.
Perdona, pensaba que había cerrado ya el tema. Al final no utilice el comando du, pero leyéndolo me dio una idea de como resolvero
lo que hice fue almacenar en un archivo, la ruta de cada raíz de árbol de directorio que recorremos de forma que si encuentro algún enlace que accede a una carpeta dentro de ese árbol, cuya raíz tengo almacenada, no accedo a el, pero si el enlace va a un árbol distinto, almaceno la ruta a la que accede como ruta raíz. De esta forma, por ejemplo, si ejecuto el script en el directorio raíz pues no accedería a ningún enlace puesto que el propio recorrido recursivo de las carpetas hará que pase por todas de manera "predeterminada" digamos
Espero haberme explicado bien.
Una vez más, disculpa que tuviera el tema bloqueado y gracias por el interés, un saludo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas