mandato diff

Finalidad

Compara archivos de texto.

Sintaxis

Para comparar el contenido de dos archivos

diff [ -c| -C Líneas | -D [ Serie ] | -e | -f | -n | -u | -U Líneas ] [ -b ] [ -i ] [ -t ] [ -w ] File1 File2

diff [ -h ] [ -b ] File1 File2

Para ordenar el contenido de los directorios y comparar archivos que son diferentes

diff [ -c | -C Líneas | -e | -f | -n | -u | -U Líneas ] [ -b ] [ -i ] [ -l ] [ -r ] [ -s ] [ -S Archivo ] [ -t ] [ -w ] Directory1 Directory2

diff [ -h ] [ -b ] Directory1 Directory2

Descripción

El mandato diff compara archivos de texto. Puede comparar archivos únicos o el contenido de directorios.
Nota: El mandato diff sólo funciona con archivos de entrada que son archivos de texto.

Si se especifican los parámetros Directory1 y Directory2 , el mandato diff compara los archivos de texto que tienen el mismo nombre en ambos directorios. Se listan los archivos binarios que difieren, los subdirectorios comunes y los archivos que aparecen en un solo directorio.

Cuando el mandato diff se ejecuta en archivos normales y al comparar archivos de texto que difieren durante la comparación de directorios, el mandato diff indica qué líneas deben cambiarse en los archivos para que estén de acuerdo. Si ni el parámetro File1 ni el parámetro File2 son un directorio, se puede especificar como-(signo menos), en cuyo caso se utiliza la entrada estándar. Si el parámetro File1 es un directorio, se utiliza un archivo de ese directorio cuyo nombre de archivo es el mismo que el parámetro File2 .

La salida típica contiene líneas de estos formatos:

Lines Affected in File1   Action        Lines Affected in File2
Number1                   a             Number2[,Number3]
Number1[,Number2]         d             Number3
Number1[,Number2]         c             Number3[,Number4] 

Estas líneas se parecen a los submandatos ed para convertir File1 en File2. Los números antes de las letras de acción pertenecen a Archivo1; los que aparecen después pertenecen a File2. Por lo tanto, al intercambiar a por d y leer de derecha a izquierda, también puede indicar cómo convertir File2 en File1. Como en el mandato ed , los pares idénticos (donde Number1 = Number2) se abrevian como un único número.

Después de cada una de estas líneas, el mandato diff muestra todas las líneas afectadas en el primer archivo precedidas por un <: (signo menor que, dos puntos) y, a continuación, muestra todas las líneas afectadas en el segundo archivo precedidas por un > (signo mayor que).

Un valor de salida de 0 indica que no hay diferencias, 1 indica diferencias encontradas y 2 indica un error.

Nota: Si se especifica más de uno de los distintivos -c, -C, -D, -e, -fo -n, -uo -U , el último de la línea de mandatos tiene prioridad. El sistema no emite un mensaje de error.

Distintivos

Elemento Descripción
-b Hace que cualquier cantidad de espacio en blanco al final de una línea se trate como un único carácter de nueva línea (los caracteres de espacio en blanco que preceden al carácter de nueva línea se ignoran) y que otras series de caracteres de espacio en blanco, sin incluir los caracteres de nueva línea, se comparen por igual.
-C Líneas Genera una comparación de mandatos diff con un número de líneas de contexto copiado igual al valor especificado por la variable Líneas . El distintivo -C modifica ligeramente la salida. La salida comienza con la identificación de los archivos implicados y sus fechas de creación. Cada cambio está separado por una línea con una docena*(asteriscos). Las líneas eliminadas de File1 se marcan con un-(signo menos) y los añadidos a File2 se marcan con un+(signo más). Las líneas cambiadas de un archivo a otro se marcan en ambos archivos con un!(signo de exclamación). Los cambios que se encuentran dentro de las líneas de contexto copiadas especificadas entre sí se agrupan como salida.
-c Genera una comparación de mandatos diff con tres líneas del contexto copiado . El distintivo -c modifica ligeramente la salida. La salida comienza con la identificación de los archivos implicados y sus fechas de creación. Cada cambio está separado por una línea con una docena*(asteriscos). Las líneas eliminadas de File1 se marcan con un-(signo menos) y los añadidos a File2 se marcan con un+(signo más). Las líneas cambiadas de un archivo a otro se marcan en ambos archivos con un!(signo de exclamación). Los cambios dentro de las líneas de contexto copiadas especificadas entre sí se agrupan como salida.
-D [ Serie ] Hace que el mandato diff cree una versión fusionada de File1 y File2 en la salida estándar. Los controles de preprocesador C se incluyen para que una compilación del resultado sin definir Serie sea equivalente a compilar File1, mientras que la definición de Serie produce File2.
-e Genera la salida en un formato adecuado para utilizarla con el editor ed para convertir File1 a File2. Al utilizar este distintivo, el siguiente programa de shell puede ayudar a mantener varias versiones de un archivo. Sólo un archivo ancestral ($1) y una cadena de scripts ed de versión a versión ($2, $3, ...) el mandato diff debe estar disponible. La última versión aparece en la salida estándar de la siguiente manera:
(shift; cat $*; echo '1,$p') | ed - $1
Se añaden mandatos adicionales a la salida cuando se utiliza el distintivo -e para comparar directorios, por lo que el resultado es un script de shell para convertir archivos de texto que son comunes a los dos directorios desde su estado en Directory1 a su estado en Directory2.
Nota: La edición de scripts producidos por los distintivos -e o -f no puede crear líneas que consten de una sola. (punto).
-f Genera una salida en un formato no adecuado para utilizarla con el editor ed , que muestra las modificaciones necesarias para convertir File1 a File2 en el orden inverso del que se produce bajo el distintivo -e .
-h Realiza una comparación alternativa que puede ser más rápida si las secciones cambiadas son cortas y están bien separadas. El distintivo -h funciona en archivos de cualquier longitud. Los distintivos -c, -C, -D, -e, -fy -n no se pueden utilizar con el distintivo -h . Todos los demás distintivos excepto el distintivo -b se ignoran cuando se utilizan con el distintivo -h .
-i Ignora las mayúsculas y minúsculas de las letras. Por ejemplo, un a en minúsculas se trata igual que un Aen mayúsculas.
-l Formato de salida largo. Cada resultado de la comparación de archivos de texto del mandato diff se canalizará a través del mandato pr para la paginación. Otras diferencias se recuerdan y se resumen después de que se hayan notificado todas las diferencias de archivo de texto.
-n Genera una salida similar a la del distintivo -e , pero en el orden opuesto y con un recuento de líneas cambiadas en cada mandato de inserción o supresión. Es el formato utilizado por el sistema de control de revisiones (RCS).
-r Hace que la aplicación del mandato diff se ejecute de forma recursiva en los subdirectorios comunes encontrados.
-s Informa de archivos que son los mismos y que no se mencionan.
-S [ Archivo ] Ignora los archivos cuyos nombres se clasifican antes del archivo especificado por la variable Archivo al comparar directorios. El distintivo -S sólo se aplica a los directorios especificados en los parámetros Directory1 y Directory2 . Si utiliza el distintivo -r con el distintivo -S , el distintivo -S no funciona de forma recursiva en los subdirectorios Directory1 y Directory2 .
-T Expande tabuladores en líneas de salida. La salida típica o la salida de distintivo -c añade caracteres al frente de cada línea, lo que puede afectar a la sangría de las líneas de origen originales y dificulta la interpretación del listado de salida. Este distintivo conserva la sangría del origen original.
-u Genera una comparación de mandatos diff con tres líneas de contexto unificado.

La salida es similar a la del distintivo -c , excepto que las líneas de contexto no se repiten; en su lugar, las líneas de contexto, suprimidas y añadidas se muestran juntas, intercaladas.

-U Líneas Genera una comparación de mandatos diff con un número de líneas de contexto unificado igual al valor especificado por la variable Líneas . La salida es similar a la del distintivo -C , excepto que las líneas de contexto no se repiten; en su lugar, el contexto, las líneas suprimidas y añadidas se muestran juntas, intercaladas.
-w Ignora todos los espacios y caracteres de tabulación y trata todas las demás series de espacios en blanco como equivalentes. Por ejemplo,if ( a == b )compara por igual conif(a==b).

Estado de salida

Este mandato devuelve los siguientes valores de salida:

Elemento Descripción
0 No se han encontrado diferencias.
1 Se han encontrado diferencias.
> 1 Se ha producido un error.

Ejemplos

  1. Para comparar dos archivos, entre:
    diff chap1.back chap1
    Muestra las diferencias entre los archivoschap1.bakychap1.
  2. Para comparar dos archivos mientras se ignoran las diferencias en la cantidad de espacio en blanco, especifique:
    diff  -w prog.c.bak prog.c
    Si dos líneas sólo difieren en el número de espacios y tabuladores entre palabras, el comando diff -w considera que son iguales.
  3. Para crear un archivo que contenga mandatos que el mandato ed pueda utilizar para reconstruir un archivo a partir de otro, especifique:
    diff  -e chap2 chap2.old >new.to.old.ed
    Esto crea un archivo denominadonew.to.old.edque contiene los submandatos ed para cambiarchap2volver a la versión del texto que se encuentra enchap2.old. En la mayoría de los casos,new.to.old.edes un archivo mucho más pequeño quechap2.old. Puede ahorrar espacio de disco suprimiendochap2.old, y puede reconstruirlo en cualquier momento entrando:
    (cat new.to.old.ed ; echo '1,$p') | ed - chap2 >chap2.old
    Los mandatos entre paréntesis añaden1,$pal final de los mandatos de edición enviados al editor ed . Los 21,$phace que el mandato ed grabe el archivo en la salida estándar después de editarlo. A continuación, esta secuencia de mandatos modificada se reta al mandato ed (| ed), y el editor lo lee como entrada estándar. El distintivo - hace que el mandato ed no muestre el tamaño del archivo y otra información adicional porque se mezclaría con el texto dechap2.old.

Archivos

Elemento Descripción
/usr/bin/diff Contiene el mandato diff .