Introducción
diff compara los cambios entre dos archivos o directorios, mostrando qué líneas se han añadido/eliminado/modificado. Los formatos de salida pueden ser unificado, de contexto o lado a lado, y se puede ajustar la sensibilidad de la comparación, por ejemplo, ignorando espacios o mayúsculas/minúsculas.
Características principales
- Comparación línea por línea y formatos legibles para humanos.
- Comparación recursiva entre directorios (-r).
- Variedad de reglas para ignorar espacios/mayúsculas/minúsculas/líneas en blanco, etc.
- Soporte para formato unificado (-u) adecuado para generar parches (.patch).
- Opciones de optimización del rendimiento para la comparación de archivos grandes.
Ejemplos de escenarios de uso
- Revisión de código: Extraer solo los archivos modificados como un parche.
- Seguimiento de cambios en archivos de configuración: Comparar la configuración antes y después del despliegue.
- Comparación de copias de seguridad/instantáneas: Verificar diferencias entre puntos en el tiempo.
- Detección de cambios no intencionados en la etapa de preprocesamiento de documentos/datos.
- Revisión de seguridad: Verificar cambios sospechosos en binarios/scripts desplegados externamente.
Formatos de salida de diff
Los formatos de salida de diff indican las instrucciones para transformar el primer archivo en el segundo.
- `a` (add): Líneas que no estaban en el primer archivo y que han sido **añadidas** en el segundo. (Ej: `1a2`)
- `c` (change): Líneas que han sido **modificadas** en ambos archivos. (Ej: `1c2`)
- `d` (delete): Líneas que estaban en el primer archivo y han sido **eliminadas** en el segundo. (Ej: `1d2`)
Opciones principales
Opciones de uso frecuente agrupadas por propósito.
1) Comportamiento básico y formatos de salida
2) Especificación de alcance/objetivo de comparación
3) Control de salida/Reglas de ignorancia
4) Ayuda/Versión
Comando generado:
Combina los comandos.
Descripción:
`diff` Ejecutando el comando.
Combina las opciones anteriores para ejecutar virtualmente los comandos junto con la IA.
Ejemplos de uso
Escenarios de comparación de uso frecuente organizados como ejemplos.
Generar parche en formato unificado
diff -u old.conf new.conf > change.patch
Comparación recursiva de directorios
diff -ruN ./v1 ./v2
Comparar ignorando diferencias de espacios
diff -uw src_old.c src_new.c
Vista lado a lado + ocultar líneas comunes
diff -y --suppress-common-lines a.txt b.txt
Códigos de salida
Consulte esto al manejar bifurcaciones en scripts.
Código | Significado |
---|---|
0 | Los dos objetos son idénticos |
1 | Hay diferencias |
2 | Ocurrió un error (error de uso/imposibilidad de acceso al archivo, etc.) |
Instalación
Está incluido por defecto en la mayoría de las distribuciones, pero si no lo está, instale el paquete diffutils.
Debian/Ubuntu
sudo apt update && sudo apt install -y diffutils
RHEL/CentOS/Fedora
sudo dnf install -y diffutils
Arch Linux
sudo pacman -S --needed diffutils
openSUSE
sudo zypper install -y diffutils
Consejos y precauciones
Puntos que a menudo se pasan por alto en la práctica.
- El formato de parche suele usar -u como estándar. Git también utiliza internamente un formato unificado similar.
- El uso excesivo de las opciones de manejo de espacios en blanco (-w, -b, -B) puede ocultar cambios realmente significativos.
- Las diferencias de salto de línea entre Windows/Linux se pueden normalizar con `--strip-trailing-cr` para facilitar la comparación.
- Al comparar directorios, use -r junto con -x/-X (reglas de exclusión) para filtrar archivos innecesarios.
- Para verificar solo la existencia muy rápidamente, use la opción -q. No mostrará detalles.