Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 4
Ir a la página 1, 2, 3, 4  Siguiente
 
Comprobar Cambios En Los Archivos De Un Directorio
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Comprobar Cambios En Los Archivos De Un Directorio 
 
Hola!.

Si tuvierais que comprobar que se han producido cambios en un conjunto de archivos. ¿ Qué método usaríais ?.
Por ejemplo, tengo una carpeta con los proyectos de gambas del mes de enero 2016.

¿ Cómo sabrías los archivos que se han modificado desde el ultimo control que hiciste hace una semana ?.

Lo que se me ha ocurrido es usar el comando md5sum y crear un archivo donde se van añadiendo cada una las
suma de verificación de los archivos que componen un directorio.

El código de ejemplo es este:

- Primero creamos el archivo de firmas. Naturalmente una vez creado, debemos luego comentar esa linea.
- Almacenar el archivo de firmas en una cadena
- Comprobamos los cambios

'Ojo. Debe cambiarse la ruta del directorio a uno que tengas tú. ;-)
Private Const rutadirectorio As String = "/home/jack/Prueba/Programacion/PracticasGambas/Enero2016/"
Private Const nomcheck As String = "checksum.md5"
Private lista As String

Public Sub Main()
  
  'Una vez creado el archivo de comprobación, esta línea debe comentarse para comprobar el efecto
  CrearFirma(rutadirectorio)
  lista = ComprobarFirma(rutadirectorio, nomcheck)
  BuscarCambios(lista)  
  
End

Public Sub CrearFirma(ruta As String)
  
  Dim arch As String
  Dim tmp As String
  Dim lst As String
  
  lst = ""
  For Each arch In RDir(ruta, Null, gb.File).Sort()    
    Exec ["md5sum", rutadirectorio &/ arch] To tmp
    lst &= tmp
  Next
  File.Save(rutadirectorio &/ nomcheck, lst)
  
End

Public Function ComprobarFirma(rutacomprobar As String, archivocheck As String) As String
  
  Dim lsttmp As String
  
  Exec ["md5sum", "--check", rutacomprobar &/ archivocheck] To lsttmp
  
  Return lsttmp
  
End

Public Sub BuscarCambios(lst As String)
  
  Dim linea As String
  
  For Each linea In Split(lst, gb.NewLine)
    If InStr(linea, "La suma no coincide") Then Print linea  
  Next
  
End
 


Supongamos que estamos trabajando con este mismo proyecto. Al grabar se crean cambios en el proyecto.
La salida den la consola fue:

Citar:

home/jack/Prueba/Programacion/PracticasGambas/Enero2016/ControlDeCambios/.gambas/MAIN: La suma no coincide
/home/jack/Prueba/Programacion/PracticasGambas/Enero2016/ControlDeCambios/.settings: La suma no coincide
/home/jack/Prueba/Programacion/PracticasGambas/Enero2016/ControlDeCambios/.src/Main.module: La suma no coincide
/home/jack/Prueba/Programacion/PracticasGambas/Enero2016/ControlDeCambios/.src/Main.module~: La suma no coincide


Claro que si usamos gb.settings no tendría que eliminar la linea de creación de firmas, una bandera se encargaría de eso
al comienzo.

Como dije es solo un ejemplo, el proceso de control de toda una unidad es largoooo.
Y seguro que hay métodos mejores.  

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
última edición por Shell el Miercoles, 13 Enero 2016, 21:24; editado 1 vez 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Comprobar Cambios En Los Archivos De Un Directorio 
 
He modificado el código, ya que la creación de las firmas no funcionaba. Se necesitaba la variable lst.
Y he ahorrado la creación de otro array.

Esta vez os subo el código para que lo probéis, si queréis.
Como es normal todo esto hecho con formularios queda mejor.  Pero las pruebas son las pruebas.  

En realidad estuve probando con shell scripts y me lleve toda la mañana para descubrir que nunca se encuentra toda
la información que quieres, horas perdidas buscando entre pdfs, horas perdidas entre páginas webs..

Respuesta..."Suele pasar".   ejem..

Crear archivo de verificación por cada archivo.
No sabía como quitar la extensión al nombre del archivo y añadirle md5.
Por otro lado cut estaba trabajando con el interior del archivo, no con un nombre.
Con echo pude hacerlo.

#!/bin/bash

for i in $(ls -1);
do
        n=$(echo $i | cut -d "." -f1)
        md5sum $i > $n.md5      
done
 


De un directorio, crear un solo archivo de verificación de un conjunto de archivos.
#!/bin/bash

for i in $(ls -1);
do
        md5sum $i >> comprueba.md5      
done
 


Que en una linea también se puede hacer.


Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Comprobar Cambios En Los Archivos De Un Directorio 
 
...porque non usaste la propiedad:

 
Print Stat("/ruta/del/archivo").LastModified

 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Comprobar Cambios En Los Archivos De Un Directorio 
 
vuott escribió: [Ver mensaje]
...porque non usaste la propiedad:

 
Print Stat("/ruta/del/archivo").LastModified


Si. Tendría que ver eso. Aunque no sé si eso realmente es lo más eficiente.
¿ Y si se pudieran manipular las fechas de los archivos ?.  

Recuerdo el truco que para ciertas protecciones , la gente cambiaba la fecha del sistema.  

Te cuento. Cuando usaba el antivirus McAfee en los tiempos del Msdos, El antivirus creaba en cada directorio un archivo
de control para saber si se habían modificado algún archivo. Incluso cortafuegos como el Outpost en Windows, cuando se modifica
un archivo (por ejemplo en una actualización) te avisa de que se va a modificar, solicitándote permiso.

Creo que estos programas trabajaran con algo más serio que una fecha, ¿ o no ?.

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Comprobar Cambios En Los Archivos De Un Directorio 
 
Shell escribió: [Ver mensaje]

Como dije es solo un ejemplo, el proceso de control de toda una unidad es largoooo.
Y seguro que hay métodos mejores.  

Saludos

es mas rapido usar crc32 que md5

de hecho  lo que esta haciedo ya existe con crc32
http://linux.die.net/man/1/cksfv
 



 
codificador - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Comprobar Cambios En Los Archivos De Un Directorio 
 
Citar:

... Aunque no sé si eso realmente es lo más eficiente.
¿ Y si se pudieran manipular las fechas de los archivos ?.  


Eficiente no quiere decir manazas-proofs. Si queremos evitar que alguien modifique algo hay otros sistemas si lo que se trata es de saber si se ha modificado algo (para hacer copias de seguridad o algo así), con la fecha debería bastar.

La experiencia dice que para todo este tipo de operaciones con ficheros y demás, lo mejor es utilizar las herramientas del SO, que suelen estar muy probadas y ser muy avanzadas a veces.
Se me ocurre una primera aproximación:

1.- La primera vez creamos un fichero (f1) con el listado de todos los archivos ordenados por fechas:
   ls -lt * > f1          

2.- Las demás veces hacemos lo mismo en f2, comparamos con f1 dejando el resultado en diferencias.txt y establecemos f2 como f1.
  
  ls -lt * > f2
  sdiff -s f1 f2 >diferencias.txt
  rm f1
  mv f2 f1

3.- Procesamos el contenido de diferencias.txt con gambas o con lo que sea  para hacer lo que queramos con los modificados.

Todo esto puede ir a un shell script o ser tratado desde gambas vía exec o shell. Dejando a parte la eficiencia de nuestra manera de procesar diferencias.txt creo que sería algo muy rápido.

Saludos.
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Comprobar Cambios En Los Archivos De Un Directorio 
 
codificador:

No conocía crc32

Shordi:

Aunque la forma de hacerlo parece sencillo, el proceso de comparación puede que sea mas lento.  

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Comprobar Cambios En Los Archivos De Un Directorio 
 
Citar:

Aunque la forma de hacerlo parece sencillo, el proceso de comparación puede que sea mas lento.

No creo, por complejo que lo hagas (y en principio con el nombre te vale) ten en cuenta que solo procesarás los archivos modificados, es decir un archivo de texto que contiene una línea por cada archivo modificado, por lo que no debe tardar mucho, que digamos.
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Comprobar Cambios En Los Archivos De Un Directorio 
 
Shell escribió: [Ver mensaje]
Si. Tendría que ver eso. Aunque no sé si eso realmente es lo más eficiente.

Porque no seria eficiente ?  


Shell escribió: [Ver mensaje]

¿ Y si se pudieran manipular las fechas de los archivos ?

Tienes que cambiar las fechas de los archivos ?
 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Comprobar Cambios En Los Archivos De Un Directorio 
 
Shell escribió: [Ver mensaje]
codificador:

No conocía crc32.............


 noooo lo conocias.... espero que no hayas estudiado informatica

pero si no te gusto cksfv   que ya hace todo
sigue inventando la rueda
 



 
codificador - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
Ocultar¡Este tema fue útil?

 

Elegir valoración:                       

Media de valoración Valoración mínima Valoración máxima Número de valoraciones
0.00 0 0 0
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Archivos De Directorio En ListView techm3 General 2 Jueves, 17 Junio 2010, 01:06 Ver último mensaje
abarzuaf
No hay nuevos mensajes Gestores De Archivos. Mostrar Directorio O... Shell Mundo Linux 0 Martes, 20 Septiembre 2016, 14:42 Ver último mensaje
Shell
No hay nuevos mensajes Directorio Padre De Otro Directorio tincho Aplicaciones/Fragmentos de Código 7 Miercoles, 05 Abril 2017, 18:17 Ver último mensaje
shordi
No hay nuevos mensajes Comprimir Varios Directorio, Archivos En 1... tincho Aplicaciones/Fragmentos de Código 5 Martes, 14 Agosto 2018, 14:37 Ver último mensaje
tincho
 

Publicar nuevo tema  Responder al tema  Página 1 de 4
Ir a la página 1, 2, 3, 4  Siguiente

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
No puede descargar archivos
No puede publicar eventos en el calendario