lista ejemplos completa comandos comando basicos linux file unix diff

ejemplos - comandos linux terminal



¿La forma más rápida de saber si dos archivos son iguales en Unix/Linux? (5)

Tengo un script de shell en el que necesito verificar si dos archivos son iguales o no. Hago esto para muchos archivos, y en mi script el comando diff parece ser el cuello de botella de rendimiento.

Aquí está la línea:

diff -q $dst $new > /dev/null if ($status) then ...

¿Podría haber una forma más rápida de comparar los archivos, quizás un algoritmo personalizado en lugar de la diff predeterminada?


¿Por qué no obtiene el hash de ambos archivos?

Pruebe este script, llámelo, por ejemplo, script.sh y luego ejecútelo de la siguiente manera: script.sh archivo1.txt archivo2.txt

#!/bin/bash file1=`md5 $1` file2=`md5 $2` if [ "$file1" = "$file2" ] then echo "Files have the same content" else echo "Files have NOT the same content" fi


Creo que cmp se detendrá en la primera diferencia de bytes:

cmp --silent $old $new || echo "files are different"


Intenta también usar el comando cksum:

chk1=`cksum <file1> | awk -F" " ''{print $1}''` chk2=`cksum <file2> | awk -F" " ''{print $1}''` if [ $chk1 -eq $chk2 ] then echo "File is identical" else echo "File is not identical" fi

El comando cksum generará el conteo de bytes de un archivo. Ver ''hombre cksum''.


Me gusta @Alex Howansky ha usado ''cmp --silent'' para esto. Pero necesito respuestas tanto positivas como negativas, entonces uso:

cmp --silent file1 file2 && echo ''### SUCCESS: Files Are Identical! ###'' || echo ''### WARNING: Files Are Different! ###''

Entonces puedo ejecutar esto en el terminal o con un ssh para verificar los archivos en un archivo constante.


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 comprobación en algún momento requiere leer todo el archivo. Los archivos grandes toman 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 los 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á bloqueado con lecturas completas de archivos.