Entonces, la utilidad Diff funciona como yo quiero para 2 archivos, pero tengo un proyecto que requiere comparaciones con más de 2 archivos a la vez, tal vez hasta 10 a la vez. Esto también requiere tener todos esos archivos uno al lado del otro. Mi investigación realmente no ha arrojado nada, vimdiff parece ser el mejor hasta ahora con la capacidad de comparar 4 a la vez.
Mi pregunta: ¿Existe alguna utilidad para comparar más de 2 archivos a la vez, o alguna forma de hackear diff / vimdiff para que pueda hacer múltiples comparaciones? Los archivos que compararé son relativamente cortos, por lo que no debería ser demasiado lento.
¡Gracias por adelantado!
fuente
Vim ya puede hacer esto:
Pero normalmente está limitado a 4 archivos. Sin embargo, puede cambiar eso modificando una sola línea en la fuente de Vim. La constante
DB_COUNT
define el número máximo de diff archivos ed, y está definida hacia la parte superiordiff.c
en las versiones 6.xy anteriores, o alrededor de dos tercios del camino hacia abajostructs.h
en las versiones 7.0 en adelante.fuente
diff
tiene la opción incorporada--from-file
y--to-file
, que compara un operando con todos los demás.--from-file=FILE1 Compare FILE1 to all operands. FILE1 can be a directory. --to-file=FILE2 Compare all operands to FILE2. FILE2 can be a directory.
fuente
Realice la compra "Más allá de la comparación": http://www.scootersoftware.com/
Le permite comparar directorios completos de archivos y parece que también se ejecuta en Linux.
fuente
si está ejecutando múltiples diferencias basadas en un archivo, probablemente podría intentar escribir un script que tenga un bucle for para ejecutar a través de cada directorio y ejecutar la diferencia. Aunque no sería uno al lado del otro, al menos podría compararlos rápidamente. Espero que haya ayudado.
fuente
No respondemos a la pregunta principal, pero aquí hay algo similar a lo que sugirió Benjamin Neil, pero diferenciando todos los archivos:
Almacene los nombres de archivo en una matriz, luego recorra las combinaciones de tamaño dos y diff (o haga lo que quiera).
files=($(ls -d /path/of/files/some-prefix.*)) # Array of files to compare max=${#files[@]} # Take the length of that array for ((idxA=0; idxA<max; idxA++)); do # iterate idxA from 0 to length for ((idxB=idxA + 1; idxB<max; idxB++)); do # iterate idxB + 1 from idxA to length echo "A: ${files[$idxA]}; B: ${files[$idxB]}" # Do whatever you're here for. done done
Derivado de la respuesta de @ charles-duffy : https://stackoverflow.com/a/46719215/1160428
fuente
Hay una buena forma sencilla de hacer esto = GREP.
Dependiendo del tamaño del texto, puede copiarlo y pegarlo, o puede redirigir la entrada del archivo al comando grep. Si crea un grep -vir / path para realizar una búsqueda inversa o un grep -ir / path. Esta es mi forma de hacer los exámenes de certificación.
fuente