Abierto
Cerca

Comparación de archivos por tamaño Linux. Una descripción general de las herramientas para la comparación visual y la resolución de conflictos de fusión. La sintaxis del comando es similar a diff.



Comparando dos archivos en la terminal Linux (6)

Aquí está mi solución para esto:

Mkdir temp mkdir resultados cp /usr/share/dict/american-english ~/temp/american-english-dictionary cp /usr/share/dict/british-english ~/temp/british-english-dictionary cat ~/temp/american -diccionario-inglés | wc -l > ~/resultados/count-american-english-dictionary cat ~/temp/british-english-dictionary | wc -l > ~/resultados/count-diccionario-inglés-británico grep -Fxf ~/temp/diccionario-inglés-americano ~/temp/diccionario-inglés-británico > ~/resultados/grep-inglés común -Fxvf ~/resultados /inglés-común ~/temp/diccionario-inglés-americano > ~/resultados/grep-inglés-americano-único -Fxvf ~/resultados/inglés-común ~/temp/diccionario-inglés-británico > ~/resultados/inglés-único -inglés

Hay dos archivos llamados "a.txt" Y "b.txt", y de los cuales hay una lista de palabras. Ahora quiero comprobar a qué palabras se agregan "a.txt" y no están en "b.txt" .

Necesito un algoritmo eficiente ya que necesito comparar dos diccionarios.

Puede utilizar la herramienta de diferencias en Linux para comparar dos archivos. Para filtrar los datos requeridos puede utilizar opciones --formato-de-grupo-cambiado Y --formato-de-grupo-sin cambios .

Se pueden utilizar las siguientes tres opciones para seleccionar el grupo apropiado para cada opción:

    "% <" получить строки из FILE1

    "%>" obtiene filas de FILE2

    "" (cadena vacía) para eliminar líneas de ambos archivos.

Por ejemplo: diff --formato-grupo-cambiado = "%<" --unchanged-group-format = "" file1.txt file2.txt

[ tmp]# cat file1.txt prueba uno prueba dos prueba tres prueba cuatro prueba ocho [ tmp]# cat file2.txt prueba uno prueba tres prueba nueve [ tmp]# diff --changed-group-format="%<" --unchanged-group-format="" file1.txt file2.txt test two test four test eight

Si prefieres el estilo de salida diff de git diff, puedes usarlo con el indicador --no-index para comparar archivos que no están en un repositorio de git:

Git diff --no-index a.txt b.txt

Usando un par de archivos con cadenas de nombres de archivo de 200k en cada uno, comparé (con el comando de tiempo incorporado) este enfoque y algunas otras respuestas aquí:

Git diff --no-index a.txt b.txt # ~1.2s comm -23<(sort a.txt) <(sort b.txt) # ~0.2s diff a.txt b.txt # ~2.6s sdiff a.txt b.txt # ~2.7s vimdiff a.txt b.txt # ~3.2s

comm parece ser el más rápido con diferencia, mientras que git diff --no-index parece ser el enfoque más rápido para la salida de estilo diff.

Actualización 2018-03-25 En realidad puede omitir el indicador --no-index si no está en un repositorio de git y desea comparar archivos que no se pueden reproducir en ese repositorio. De las páginas de manual:

Este formulario está diseñado para comparar datos de dos rutas del sistema de archivos. Puede omitir la opción -no-index cuando ejecuta el comando en un árbol de trabajo administrado por Git y al menos una de las rutas apunta fuera del árbol de trabajo, o cuando ejecuta el comando fuera de un árbol de trabajo administrado por Git.

Utilice comunicación -13 (requiere archivos ordenados) :

$ cat file1 uno dos tres $ cat file2 uno dos tres cuatro $ comm -13<(sort file1) <(sort file2) four

Ordenarlos y usar comm:

Com-23<(sort a.txt) <(sort b.txt)

comm compara (ordena) los archivos de entrada y, de forma predeterminada, genera tres columnas: líneas que son exclusivas de a, líneas que son exclusivas de b y líneas que están presentes en ambos. Al especificar -1 , -2 y/o -3 puede suprimir la salida correspondiente. Por lo tanto, comm -23 ab solo enumera las entradas que son exclusivas de a. La sintaxis que uso es<(...) для сортировки файлов на лету, если они уже отсортированы, вам это не нужно.

Si tienes vim instalado, prueba esto:

Archivo Vimdiff1 Archivo2

Vim -d archivo1 archivo2

lo encontrarás fantástico.

Para comparar dos o más archivos en Linux, existe el comando diff. Puede comparar tanto archivos como directorios individuales. Veamos la sintaxis, las opciones del comando diff y algunos ejemplos de uso.

sintaxis del comando diff

El comando diff tiene la siguiente sintaxis:

Diff [opciones] archivos-o-directorios

Especificamos opciones y proporcionamos dos o más archivos o directorios que necesitamos comparar.

opciones de comando diff

Veamos las opciones principales del comando diff. Consideraré solo aquellas opciones que uso con más frecuencia.

-MIIgnore los cambios causados ​​al agregar un carácter de tabulación al texto.
-bIgnore los cambios causados ​​por la adición de espacios.
-wIgnore los cambios que impliquen agregar espacios y tabulaciones.
-Bignorar nuevas líneas vacías.
-p (o --show-c-función)muestra el nombre de la función del lenguaje C en la que se encontraron cambios.
-y (o --lado a lado)mostrar los resultados en dos columnas.
-rexplorar directorios de forma recursiva.
-X ARCHIVOexcluir de la búsqueda los archivos cuyos nombres coincidan con los patrones en el archivo ARCHIVO.
-d (o --mínimo)Intente encontrar la menor cantidad de cambios posible (es decir, excluya los falsos positivos).

Ejemplos de uso del comando diff

Comparando dos archivos de texto

Para comparar simplemente dos archivos de texto llamados myfile1 y myfile2, ejecute el comando en la terminal:

Diferenciar miarchivo1 miarchivo2

Es conveniente redirigir la salida del comando diff a un archivo con la extensión diff. La mayoría de los editores de texto de Linux, como Gedit, reconocen este archivo y resaltan su sintaxis. Para dirigir el resultado de la comparación al archivo change.diff, debe utilizar el símbolo de redirección de flujo (>):

Diferenciar miarchivo1 miarchivo2 > cambios.diff

Comparación de directorios que contienen archivos de texto.

Veamos un ejemplo de comparación de dos directorios (mydir1 y mydir2) que contienen archivos de texto. La principal diferencia aquí con respecto al ejemplo anterior es que agregaremos la opción -r, lo que significa que recorrerá recursivamente archivos en directorios.

Diff -r midir1 midir2 > cambios.diff

Ahora supongamos que los directorios en los que comparamos archivos contienen mucha "basura" que no debemos comparar. Creemos un archivo exclusionFiles y escribamos en él los patrones y nombres de los archivos que no debemos comparar. Por ejemplo, el contenido de excluirFiles podría verse así:

*.o Registro de cambios* *.bak *.exe

Ahora digamos al comando diff que use nuestro archivo excluirFiles al comparar directorios:

Diff -r -X excluirFiles midir1 midir2 > cambios.diff

Por lo tanto, comparamos archivos cuyos nombres no coinciden con los patrones en el archivo exclusionFiles, por ejemplo, vasya.exe o ChangeLog12.

Agreguemos algunas opciones más que se describen anteriormente para mejorar el resultado de la comparación:

Diff -rwBd -X excluirFiles midir1 midir2 > cambios.diff

Comparamos archivos en los directorios mydir1 y mydir2, ignorando los cambios debidos a la adición de líneas en blanco, espacios y tabulaciones, y también utilizamos patrones de nombres de archivos en exclusionFiles para excluir archivos innecesarios de la comparación.

Conclusión

Para obtener más información sobre el uso del comando diff en su sistema Linux, puede ejecutar el comando:

hombre diferencia

También existen programas que te permiten comparar archivos mediante una interfaz gráfica. Por ejemplo, el programa Meld, que muestra visualmente dónde y qué ha cambiado en los archivos.

), sus comparaciones, así como comparaciones de clientes GUI para ellos. También hubo discusiones sobre complementos IDE para trabajar con git y mercurial. Pero prácticamente no habia informacion sobre comparación visual y fusión de herramientas de resolución de conflictos.

Recientemente "salté" de mercurial (que todavía encuentro más conveniente y lógico) a git, porque la gran mayoría de los proyectos que me interesan usan git y están alojados en github. En este sentido, surgió la cuestión de revisar el arsenal de herramientas, en particular la cuestión de selección de herramientas comparación visual y fusión (diff y merge). Para cubrir la falta de información sobre el centro, decidí escribir esta mini reseña. Como dicen, en persecución.

Debajo del corte también encontrará ejemplos de configuraciones de Git para usar con DiffMerge y WinMerge en Windows. Creo que ahorrará mucho tiempo.

Nombre Peculiaridades Plataforma

KDiff3

Git y WinMerge

1) Agregar al directorio c:/Git/libexec/git-core/mergetools/
archivo winmerge con el siguiente contenido:

Diff_cmd () ( "c:/Archivos de programa (x86)/WinMerge/WinMergeU.exe" \ "$LOCAL" "$REMOTE" >/dev/null 2>&1 ) merge_cmd () ( "c:/Archivos de programa (x86) )/WinMerge/WinMergeU.exe" \ "$PWD/$LOCAL" "$PWD/$REMOTE" "$PWD/$MERGED" >/dev/null 2>&1 estado=$? )
Cuando Git no logra fusionar los cambios automáticamente, se produce un conflicto de fusión y se agregan marcadores de fusión al archivo en conflicto (<<<<<<<, =======, и >>>>>>>). Son necesarios para resolver el conflicto utilizando herramientas de terceros.
Veamos el archivo Léame.txt que se forma como resultado de la fusión de ramas maestro y nuevo en el ejemplo anterior:

<<<<<<< HEAD master str ======= new str >>>>>>> nuevo
Podemos abrir el archivo de conflicto usando el programa WinMerge para resolver el conflicto.

Esto abrirá la herramienta de combinación bidireccional:

Según la lógica descrita, reescribiremos el comando de combinación fusionar_cmd de la siguiente manera:
merge_cmd() ( "c:/Archivos de programa (x86)/WinMerge/WinMergeU.exe" \ "$MERGED" >/dev/null 2>&1 status=$? )
De hecho, las dos opciones anteriores son equivalentes.

2) Editemos .gitconfig
herramienta = winmerge cmd = "winmerge" herramienta = winmerge cmd = "winmerge" trustExitCode = false keepBackup = false
la última línea cancela el guardado de archivos de respaldo en el directorio del repositorio.

3) Creemos un conflicto al fusionar dos ramas (ver ejemplo usando DiffMerge).
git difftool master new // compara dos ramas

Para resolver el conflicto al fusionar ramas, use el comando
herramienta de fusión git

), sus comparaciones, así como comparaciones de clientes GUI para ellos. También hubo discusiones sobre complementos IDE para trabajar con git y mercurial. Pero prácticamente no habia informacion sobre comparación visual y fusión de herramientas de resolución de conflictos.

Recientemente "salté" de mercurial (que todavía encuentro más conveniente y lógico) a git, porque la gran mayoría de los proyectos que me interesan usan git y están alojados en github. En este sentido, surgió la cuestión de revisar el arsenal de herramientas, en particular la cuestión de selección de herramientas comparación visual y fusión (diff y merge). Para cubrir la falta de información sobre el centro, decidí escribir esta mini reseña. Como dicen, en persecución.

Debajo del corte también encontrará ejemplos de configuraciones de Git para usar con DiffMerge y WinMerge en Windows. Creo que ahorrará mucho tiempo.

Nombre Peculiaridades Plataforma

KDiff3

Git y WinMerge

1) Agregar al directorio c:/Git/libexec/git-core/mergetools/
archivo winmerge con el siguiente contenido:

Diff_cmd () ( "c:/Archivos de programa (x86)/WinMerge/WinMergeU.exe" \ "$LOCAL" "$REMOTE" >/dev/null 2>&1 ) merge_cmd () ( "c:/Archivos de programa (x86) )/WinMerge/WinMergeU.exe" \ "$PWD/$LOCAL" "$PWD/$REMOTE" "$PWD/$MERGED" >/dev/null 2>&1 estado=$? )
Cuando Git no logra fusionar los cambios automáticamente, se produce un conflicto de fusión y se agregan marcadores de fusión al archivo en conflicto (<<<<<<<, =======, и >>>>>>>). Son necesarios para resolver el conflicto utilizando herramientas de terceros.
Veamos el archivo Léame.txt que se forma como resultado de la fusión de ramas maestro y nuevo en el ejemplo anterior:

<<<<<<< HEAD master str ======= new str >>>>>>> nuevo
Podemos abrir el archivo de conflicto usando el programa WinMerge para resolver el conflicto.

Esto abrirá la herramienta de combinación bidireccional:

Según la lógica descrita, reescribiremos el comando de combinación fusionar_cmd de la siguiente manera:
merge_cmd() ( "c:/Archivos de programa (x86)/WinMerge/WinMergeU.exe" \ "$MERGED" >/dev/null 2>&1 status=$? )
De hecho, las dos opciones anteriores son equivalentes.

2) Editemos .gitconfig
herramienta = winmerge cmd = "winmerge" herramienta = winmerge cmd = "winmerge" trustExitCode = false keepBackup = false
la última línea cancela el guardado de archivos de respaldo en el directorio del repositorio.

3) Creemos un conflicto al fusionar dos ramas (ver ejemplo usando DiffMerge).
git difftool master new // compara dos ramas

Para resolver el conflicto al fusionar ramas, use el comando
herramienta de fusión git

Los webmasters o propietarios de sitios web a menudo necesitan comparar dos archivos según el contenido. En este artículo aprenderá cómo comparar dos archivos entre sí. Aquí se describen todos los métodos que conozco para comparar archivos de texto y scripts (html, css, php, etc.).

Método 1. Fusionar

fusionar- una herramienta gráfica para obtener diferencias y fusionar dos archivos, dos directorios. Meld es una herramienta visual de comparación y fusión de archivos y directorios para Linux. Meld está dirigido principalmente a desarrolladores. Sin embargo, puede resultar útil para cualquier usuario que necesite una buena herramienta para comparar archivos y directorios.

En Meld puedes comparar dos o tres archivos, o dos o tres directorios. Puede ver la copia de trabajo de sistemas de control de versiones populares como CVS, Subversion, Bazaar-NG y Mercurial. Meld está disponible para la mayoría de distribuciones de Linux (Ubuntu, Suse, Fedora, etc.) y está presente en sus repositorios principales.

# aptitude instalar fusión

Método 2: comparar el contenido de dos archivos en WinMerge.

El programa gratuito WinMerge le permite comparar no sólo el contenido de los archivos, sino que también compara el contenido de carpetas enteras. WinMerge es una herramienta de combinación y diferenciación de código abierto para Windows. WinMerge puede comparar archivos y carpetas, mostrando las diferencias en un formato de texto visual que es fácil de entender y procesar.

Después de la instalación, abra el elemento del menú "Archivo" - "Abrir". Seleccione archivos para comparar. Para hacer esto, haga clic en el botón "Examinar" y seleccione un archivo. Después de seleccionar los archivos, haga clic en el botón "Aceptar".

También puedes editar archivos en WinMerge. Después de cerrar la ventana de comparación, el programa ofrecerá guardar los cambios en los archivos.

Método 3. diferencia

diferencia- utilidad de comparación de archivos que muestra la diferencia entre dos archivos.

    Para comparar directorios utilice este comando: $ diff -qr< current-directory> < backup-directory>

Método 4. Comparar

Kompare: muestra las diferencias entre archivos. Puede comparar el contenido de archivos o directorios, así como crear, mostrar y aplicar archivos de parches. Kompare es una utilidad gráfica de diferencias que le permite encontrar diferencias en archivos y también fusionarlos. Escrito en Qt y diseñado principalmente para KDE. Estas son sus principales características:

    Admite múltiples formatos de diferencias;

    Admite comparación de archivos y directorios de Linux;

    Soporte para ver archivos diff;

    Interfaz personalizable;

    Crear y aplicar parches a archivos.

Método 5. Comparar archivos en Total Commander

    Sistemas operativos compatibles: Windows

Total Commander cuenta con una herramienta de comparación de archivos por contenido, donde no sólo puedes comparar contenido, sino también editarlo y copiarlo de un archivo a otro.

Después de iniciar Total Commander, en uno de los paneles, seleccione (tecla Insertar) el primer archivo para comparar; en el segundo panel, abra la carpeta con el segundo archivo y coloque el cursor sobre él. Llame al programa para comparar: "Archivos → Comparar por contenido".

Para realizar cambios en el archivo, simplemente haga clic en el botón "Editar". El programa ofrece funciones de copia y reversión, búsqueda y codificación. Si ha realizado cambios en el archivo, después de cerrar la ventana de comparación, se le pedirá que guarde los cambios.

Método 6. Comparar archivos en Notepad++

    Sistemas operativos compatibles: Windows, puede ejecutarse en Linux

Notepad++ no puede comparar archivos. Para que esta funcionalidad aparezca en Notepad++, debe instalar el complemento "Comparar".

Inicie el editor - vaya al elemento del menú "Complementos" - "Administrador de complementos" - "Mostrar administrador de complementos". En la nueva ventana, seleccione el complemento "Comparar" y haga clic en el botón "Instalar".

Después de instalar el complemento, abra dos archivos y seleccione el menú "Complementos" - "Comparar" - "Comparar (Alt+D)". El resultado de la comparación de archivos se presentará en paneles separados. Aparecerá una señal de advertencia frente a las líneas en las que se encuentren diferencias.

Método 7: comparar archivos mediante el símbolo del sistema de Windows

La comparación mediante la línea de comandos de Windows (cmd.exe) no le permite editar archivos, pero puede simplemente comparar el contenido de los archivos utilizando este método.

Para abrir la línea de comando de Windows, vaya a "Inicio" - "Todos los programas" - "Accesorios" - "Símbolo del sistema" o presione la tecla "Windows + R", escriba cmd y presione la tecla Enter.

En el símbolo del sistema, ingrese el comando:

fc / N ruta al primer archivo ruta al segundo archivo