Para los archivos que no son diferentes, cualquier método requerirá haber leído ambos archivos por completo, incluso si la lectura fue en el pasado.
No hay alternativa. Por lo tanto, crear hashes o sumas de verificación en algún momento requiere leer todo el archivo. Los archivos grandes llevan tiempo.
La recuperación de metadatos de archivos es mucho más rápida que leer un archivo grande.
Entonces, ¿hay algún metadato de archivo que pueda usar para establecer que los archivos son diferentes? Tamaño del archivo ? o incluso resultados del comando de archivo que solo lee una pequeña porción del archivo?
Fragmento de código de ejemplo de tamaño de archivo:
ls -l $1 $2 |
awk 'NR==1{a=$5} NR==2{b=$5}
END{val=(a==b)?0 :1; exit( val) }'
[ $? -eq 0 ] && echo 'same' || echo 'different'
Si los archivos son del mismo tamaño, entonces está atascado con lecturas completas de archivos.