Comprobar Cambios En Los Archivos De Un Directorio


Ir a la página 1, 2, 3, 4  Siguiente

Objetivo: 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

última edición por Shell el Miercoles, 13 Enero 2016, 21:24; editado 1 vez
Objetivo: 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


ControlDeCambios.tar.gz
Descripción:  
Descargar
Nombre del archivo: ControlDeCambios.tar.gz
Tamaño: 12.51 KB
Descargado: 56 veces
ControlDeCambios.tar.gz
Descripción:  
Descargar
Nombre del archivo: ControlDeCambios.tar.gz
Tamaño: 12.51 KB
Descargado: 56 veces
ControlDeCambios.tar.gz
Descripción:  
Descargar
Nombre del archivo: ControlDeCambios.tar.gz
Tamaño: 12.51 KB
Descargado: 56 veces

Objetivo: Re: Comprobar Cambios En Los Archivos De Un Directorio
...porque non usaste la propiedad:

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

Perfil MP  
Objetivo: 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

Objetivo: 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

Perfil MP  
Objetivo: 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.

Perfil MP  
Objetivo: 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

Objetivo: 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.

Perfil MP  
Objetivo: 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 ?

Perfil MP  
Objetivo: 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

Perfil MP  
Ir a la página 1, 2, 3, 4  Siguiente

Página 1 de 4


  
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
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 2.6562s (PHP: -95% SQL: 195%)
Consultas SQL: 48 - Debug off - GZIP Activado