Linux/Unix Shell Scripting - Comparar dos archivos binarios

 
Vista:
sin imagen de perfil
Val: 8
Ha disminuido 1 puesto en Linux/Unix Shell Scripting (en relación al último mes)
Gráfica de Linux/Unix Shell Scripting

Comparar dos archivos binarios

Publicado por Santi (5 intervenciones) el 05/10/2018 12:43:49
Saludos,
Es bien sabido los comandos para comparar archivos binarios a través de consola calculando hash de infinidad de maneras y comandos.
El problema viene cuando he de comparar varios millones de archivos (Sí. Han oído bien, 7 MILLONES DE ARHIVOS BINARIOS)
Cualquier cosa que pruebo me supone semanas de proceso en el servidor.
el sistema más rápido que he encontrado ha sido comparar su tamaño obtenido con ls:


TamArch1=$( TamanoArchivo "Archivo1" )
TamArch2=$( TamanoArchivo "Archivo2" )
.
.
.
function TamanoArchivo(){
TamanoArchivo=$( ls -l "$1" | awk '{print $5}' )
echo "$TamanoArchivo"
}


Pero me parece una solución poco elegante con el inconveniente de que puede darse la casualidad de que sean diferentes archivos pero con el mismo tamaño.

Alguien propone otra solución (más rápida)
Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Comparar dos archivos binarios

Publicado por Tom (332 intervenciones) el 05/10/2018 16:34:09
¿ Más rápida ? No uses ls | awk, probablemente es innecesario, además de lento. Usa stat, por ejemplo, y parsea dentro del shell.
¿ Más fiable ? cmp o cualquier generador de checksums (sum y cksum son simples).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 8
Ha disminuido 1 puesto en Linux/Unix Shell Scripting (en relación al último mes)
Gráfica de Linux/Unix Shell Scripting

Comparar dos archivos binarios

Publicado por Santi (5 intervenciones) el 06/10/2018 21:37:02
Gracias,

No se me había ocurrido (siempre tiro por lo tradicional)

TamanoArchivo=$( ls -l "$1" | awk '{print $5}' )
Quedaría por esto otro
TamanoArchivo=$( stat -c%s "$1" )

Por si alguien puede sacar provecho ;)

Nota:
Ya había pensado la opción de trabajar sobre listados de archivos en vez de sobre los archivos en particular y luego ejecutar los procesos, el tema es que hasta que compruebo los datos del primer archivo no puedo saber a que segundo archivo pertenece y una vez accedido a ese fichero ya puedo continuar con el proceso.
Por ejemplo En un archivo multimedia:
[ "$TamArch1" -eq "$TamArch2" ] ; then <no hago nada>
[ "$TamArch1" -gt "$TamArch2" ] ; then <compruebo su resolución y duración y dependiendo de como sea hacer una cosa u otra>
.
.
.
Trabajo de varias semanas de proceso segmentando directorios y procesos simultáneos. [270TB de datos]
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar