Reglamento general de los foros   •   FAQ   •   Buscar en el foro •  Registrarse | Iniciar sesión 



Foros Linux » Desarrollo » Programación


Nuevo tema Responder al tema
 [ 6 mensajes ] 
Patrocinadores

Autor
Buscar:
Mensaje

Desconectado
Forista Nuevo
Forista Nuevo

Registrado: Jue Abr 07, 2011 3:05 am
Mensajes: 4

Nota Publicado: Jue Abr 07, 2011 3:39 am 
Arriba  
Hola a todos, estoy haciendo un script en bash que muestre todos los ficheros de los usuarios del sistema y que elimine aquellos que superen un determinado tamaño, y mantener así un tope sobre el tamaño de archivos validos.

En principio el script no tiene demasiada complicación, salvo porque al recorrer de forma recursiva, directorios y enlaces simbólicos, cuando un enlace simbólico hace referencia a un directorio de una jerarquia superior de su mismo árbol, se crea un bucle infinito y no se como evitar que esto suceda sin tener que eliminar por completo el recorrido de los enlaces simbólicos. la idea seria que los enlaces simbolicos fueran parte del recorrido.

voy a poner aquí un pequeño esquema que espero haga mas clara mi pregunta:

Imagen

donde las flechas discontinuas marcan los enlaces simbolicos y las lineas discontinuas un numero indeterminado de directorios que no es importante.

Si entro recursivamente al nodo A, acabare llegando al nodo F que al final me devolverá a A y el ciclo comenzara de nuevo , podría recordar la ruta a la que apuntaba el ultimo enlace visitado pero entonces viene el ejemplo de E si llego al nodo E y voy al F mi ultimo enlace visitado sera E, una vez encuentre el enlace F-A mi ultimo enlace visitado sera F por lo que al volver al nodo F no tendré problemas, pero cuando vuelva al nodo E, el ultimo enlace visitado seguirá siendo F y el ciclo se repetirá.

a alguien se le ocurre, o sabe , alguna solucion?

un saludo.

_________________
Si te gusta la informatica visita mi blog :http://informaticandotf.blogspot.com/


Última edición por bray85 el Dom Abr 17, 2011 1:05 pm, editado 2 veces en total
 Perfil Email  

Desconectado
Forista Distinguido
Forista Distinguido
Avatar de Usuario

Registrado: Jue Abr 26, 2007 11:00 pm
Mensajes: 1426

Nota Publicado: Jue Abr 07, 2011 7:02 am 
Arriba  
Citar:
ficheros

-e fichero Verdadero si el fichero existe.
-d fichero Verdadero si fichero existe y es un directorio.
-f fichero Verdadero si fichero existe y se un fichero regular.
-L fichero Verdadero si fichero existe y se un enlace simbólico.
-r fichero Verdadero si fichero existe y se puede leer.
-w fichero Verdadero si fichero existe y se puede escribir.
-x fichero Verdadero si fichero existe y se ejecutable.
fichero1 -nt fichero2 Verdadero si fichero1 mas actual
(según la fecha de modificación) que fichero2.
fichero1 -ot fichero2 Verdadero si fichero1 mas antiguo que fichero2.
fichero1 -ef fichero2 Verdadero si fichero1 y fichero2 tiene el mismo
numero de device e inodo.

Estas son las mas comunes, hay unas cuantas mas. man bash :)


http://www.etxea.net/docu/taller_bash/bash.html

_________________
"Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit."

"Finibus Bonorum Et Malorum", Cicerón

 Perfil WWW  

Desconectado
Forista Nuevo
Forista Nuevo

Registrado: Jue Abr 07, 2011 3:05 am
Mensajes: 4

Nota Publicado: Jue Abr 07, 2011 7:33 am 
Arriba  
Hola, gracias por la respuesta, así es como lo tengo hecho ahora, utilizando la opción -L pero la idea no seria descartar todos los enlaces simbólicos, sino evitar que se cree un bucle infinito. es posible que el script se ejecute desde un árbol de directorios de un usuario y que tenga un enlace a algún fichero fuera de ese árbol pero que pertenezca al mismo usuario. por lo que se deben recorrer los enlaces pero detectando el bucle infinito para no caer en el.

no es que yo sea asi de puñetero, es que es para una practica de la universidad y me lo piden así jajajajajja

_________________
Si te gusta la informatica visita mi blog :http://informaticandotf.blogspot.com/

 Perfil Email  

Desconectado
Forista Distinguido
Forista Distinguido
Avatar de Usuario

Registrado: Jue Abr 26, 2007 11:00 pm
Mensajes: 1426

Nota Publicado: Jue Abr 07, 2011 8:29 am 
Arriba  
Muy Interesante, una posibilidad podría ser crear una lista de nodos ya visitados.
Por ejemplo, tu lees el nodo R y lo agregas a la lista, luego el A y lo agregas a la lista, luego el B ..., el D ..., y finalmente llegas a F que es un enlace simbólico, entonces a partir de F obtienes a que nodo apunta, si ese nodo apunta a un nodo que ya esta en la lista (en este caso A) entonces no continua el recorrido por ese lugar.

_________________
"Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit."

"Finibus Bonorum Et Malorum", Cicerón

 Perfil WWW  

Desconectado
Forista Nuevo
Forista Nuevo

Registrado: Jue Abr 07, 2011 3:05 am
Mensajes: 4

Nota Publicado: Vie Abr 15, 2011 11:38 am 
Arriba  
muchas gracias intentare a ver si puedo solucionarlo como dices, y si consigo la solucion posteo por aqui el codigo entero y asi a ver si ayuda para otra ocasion, un saluod.

Editado -- Vie Abr 15, 2011 11:38 am --

Bueno al final lo he solucionado de una forma un tanto burda pero efectiva y no demasiado lenta. al final he almacenado la raíz de cada árbol de directorios que recorremos en un archivo de texto y cuando encontramos un enlace compruebo si pertenece a un árbol de directorios que ya hemos recorrido o estamos recorriendo según lo almacenado en el fichero, si es así, no se accede al enlace simbólico y en caso de no pertenecer a un árbol conocido pues accedemos al el almacenando el fichero al que apunta como una nueva raiz de arbol.

Es decir el proceso es basicamente este

iniciamos la ejecucion del script y almacenamos el fichero desde el que se ejecuta como la raiz del primer arbol de directorios por lo que cualquier enlace que apunte al interor de este arbol no sera recorrido

si encontramos un enlace que apunta fuera de este arbol, guardaremos su ruta como una nueva raiz y no recorreremos mas enlaces que apuntes a ningun arbol almacenado en fichero

de esta forma si ejecutamos el script en el directorio raiz del sistema, no recorreremos nunca ningun enlace simbolico ya que todos pertenecen al mismo arbol de directorios.

espero haberlo explicado claro y que sirva, un saludo

_________________
Si te gusta la informatica visita mi blog :http://informaticandotf.blogspot.com/


Última edición por bray85 el Dom Abr 17, 2011 1:03 pm, editado 1 vez en total
 Perfil Email  

Desconectado
Moderador
Moderador
Avatar de Usuario

Registrado: Mié Abr 18, 2007 11:00 pm
Mensajes: 1209
Ubicación: Cojutepeque, El Salvador C. A.

Nota Publicado: Dom Abr 17, 2011 9:42 am 
Arriba  
gracias por la explicación bray85, por favor agrega al título del tema "solucionado" para futura referencia.

_________________
Grüße...
Maiku

Full linux alchemist!!!

 Perfil WWW  
Mostrar mensajes previos:  Ordenar por  
 [ 6 mensajes ] 
Nuevo tema Responder al tema

Saltar a:  


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados

No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group :: Style based on FI Subice by phpBBservice.nl :: Todos los horarios son UTC - 6 horas
Traducción al español por Huan Manwë
phpBB SEO