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