comando diff

Propósito

Compara arquivos de texto.

Sintaxe

Comparar os Conteúdos de Dois Arquivos

diff [ -c| -C Linhas | -D [ Sequência ] | -e | -f | -n | -u | -U Linhas ] [ -b ] [ -i ] [ -t ] [ -w ] File1 File2

diff [ -h ] [ -b ] File1 File2

Para Classificar os Conteúdos de Diretórios e Comparar Arquivos Que São Diferentes

diff [ -c | -C Linhas | -e | -f | -n | -u | -U Linhas ] [ -b ] [ -i ] [ -l ] [ -r ] [ -s ] [ -S Arquivo ] [ -t ] [ -w ] Directory1 Directory2

diff [ -h ] [ -b ] Directory1 Directory2

Descrição

O comando diff compara arquivos de texto. Ele pode comparar arquivos simples ou o conteúdo de diretórios.
Nota: O comando diff só funciona com arquivos de entrada que são arquivos de texto.

Se os parâmetros Directory1 e Directory2 forem especificados, o comando diff compara os ficheiros de texto que têm o mesmo nome em ambos os diretórios. Arquivos binários que diferem, subdiretórios comuns e arquivos que aparecem em apenas um diretório estão listados.

Quando o comando diff é executado em arquivos regulares, e ao comparar arquivos de texto que diferem durante a comparação de diretórios, o comando diff informa quais linhas devem ser alteradas nos arquivos para fazê-los concordar. Se nem o parâmetro File1 nem File2 é um diretório, então pode ser dado como-(sinal de menos), caso em que a entrada padrão é usada. Se o parâmetro File1 for um diretório, então um arquivo nesse diretório cujo nome de arquivo é o mesmo que o parâmetro File2 é usado.

A saída típica contém linhas dessas formas:

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

Essas linhas se assemelham a subcomandos ed para converter File1 em File2. Os números antes das letras de ação pertencem ao File1; aqueles depois de perter a File2. Assim, ao trocar a por d e ler da direita para a esquerda, você também pode dizer como converter File2 em File1. Como no comando ed , pares idênticos (onde Number1 = Number2) são abreviados como um número único.

Seguindo cada uma dessas linhas, o comando diff exibe todas as linhas afetadas no primeiro arquivo precedido por um <: (menos que sinal, colon), então exibe todas as linhas afetadas no segundo arquivo são precedidas por um > (maior que o sinal).

Um valor de saída de 0 indica sem diferenças, 1 indica diferenças encontradas, e 2 indica um erro.

Nota: Se mais de uma das bandeiras -c, -C, -D, -e, -f, ou -n, -uou -U são especificadas, a última na linha de comando tem precedência. O sistema não emite uma mensagem de erro.

Sinalizações

Item Descrição
-b Faz com que qualquer quantidade de espaço em branco no final de uma linha seja tratada como um único caractere de nova linha (os caracteres de espaço em branco que precedem o caractere de nova linha são ignorados) e outras sequências de caracteres de espaço branco, não incluindo caracteres de nova linha, para comparar igualmente.
-C Linhas Produz uma comparação de comandos diff com um número de linhas de copiado igual ao valor especificado pela variável Linhas . A sinalização -C modifica a saída ligeiramente. A saída começa com a identificação dos arquivos envolvidos e suas datas de criação. Cada mudança é separada por uma linha com uma dúzia*(asteriscos). As linhas removidas do File1 são marcadas com um-(sinal de menos) e aqueles adicionados em File2 são marcados com um+(mais sinal). As linhas alteradas de um arquivo para o outro são marcadas em ambos os arquivos com um!(ponto de exclamação). As mudanças que ficam dentro das linhas de contexto copiadas especificadas de cada outro são agrupadas como saída.
-C Produz uma comparação de comandos diff com três linhas de contexto copiadas . A sinalização -c modifica a saída ligeiramente. A saída começa com a identificação dos arquivos envolvidos e suas datas de criação. Cada mudança é separada por uma linha com uma dúzia*(asteriscos). As linhas removidas do File1 são marcadas com um-(sinal de menos) e aqueles adicionados em File2 são marcados com um+(mais sinal). As linhas alteradas de um arquivo para o outro são marcadas em ambos os arquivos com um!(ponto de exclamação). Mudanças dentro das linhas de contexto copiadas especificadas de cada outro são agrupadas como saída.
-D [ String ] Faz com que o comando diff crie uma versão mesclada do File1 e do File2 na saída padrão. Os controles do pré-processador C são incluídos para que uma compilação do resultado sem definir String seja equivalente a compilar File1, enquanto define o rendimento String File2.
-e Produz saída em um formulário adequado para uso com o editor ed para converter File1 para File2. Ao utilizar esta sinalização, o programa shell a seguir pode ajudar a manter várias versões de um arquivo. Apenas um arquivo ancestral ($1) e uma cadeia de scripts de versão para versão ed ($2, $3, ...) feito pelo comando diff precisa estar em mãos. A versão mais recente aparece na saída padrão da seguinte forma:
(shift; cat $*; echo '1,$p') | ed - $1
Comandos extras são adicionados à saída quando a sinalização -e é usada para comparar diretórios, então o resultado é um shell script para conversão de arquivos de texto que são comuns aos dois diretórios de seu estado em Directory1 para seu estado em Directory2.
Nota: Editar scripts produzidos pelas bandeiras -e ou -f não podem criar linhas constituídas por um único. (ponto).
-f Produz saída em um formulário não adequado para uso com o editor ed , mostrando as modificações necessárias para converter File1 para File2 na ordem inversa daquela produzida sob a bandeira -e .
-h Executa uma comparação alternativa que pode ser mais rápida se as seções alteradas forem curtas e bem separadas. A sinalização -h funciona em arquivos de qualquer comprimento. As bandeiras -c, -C, -D, -e, -fe -n não podem ser usadas com a bandeira -h . Todas as outras bandeiras, exceto a bandeira -b são ignoradas quando usadas com a bandeira -h .
-i Ignora o caso de letras. Por exemplo, uma letra minúsida a é tratada a mesma de um uppercase A.
-l Formato de saída longo. Cada resultado a partir da comparação de arquivo de texto de comandos diff é pipado através do comando pr para paginação. Outras diferenças são lembradas e resumidas depois que todas as diferenças de arquivo de texto são relatadas.
-n Produz saída similar à da bandeira -e , mas na ordem oposta e com contagem de linhas alteradas em cada comando insert ou delete. Este é o formulário utilizado pelo sistema de controle de revisão (RCS).
-r Causa a aplicação do comando diff recorrentemente a subdiretórios comuns encontrados.
-S Reporta arquivos que são os mesmos e de outra forma não mencionados.
-S [ Arquivo ] Ignora arquivos cujos nomes colam antes do arquivo especificado pela variável Arquivo ao comparar diretórios. A sinalização -S só se aplica aos diretórios especificados nos parâmetros Directory1 e Directory2 . Se você usar a sinalização -r com a bandeira -S , a sinalização -S não funciona recorrentemente nos subdiretórios Directory1 e Directory2 .
-t Expande guias em linhas de saída. A saída típica ou a saída de bandeira -c adiciam caracteres à frente de cada linha, o que pode afetar recuo das linhas de origem originais e torna a listagem de saída difícil de interpretar. Esta bandeira preserva a indentação da fonte original.
-u Produz uma comparação de comando diff com três linhas de contexto unificadas.

A saída é semelhante à da sinalização -c , exceto que as linhas de contexto não são repetidas; em vez disso, o contexto, excluído e linhas adicionadas são mostradas juntas, intercaladas.

-U Linhas Produz uma comparação de comandos diff com várias linhas de contexto unificadas iguais ao valor especificado pela variável Lines . A saída é semelhante à da sinalização -C , exceto que as linhas de contexto não são repetidas; em vez disso, o contexto, excluído e linhas adicionadas são mostradas juntas, intercaladas.
-w Ignora todos os espaços e caracteres de guia e trata todas as outras cadeias de espaços em branco como equivalentes. Por exemplo,if ( a == b )compara-se igualmente aif(a==b).

Status de saída

Esse comando retorna os valores de saída a seguir:

Item Descrição
0 Nenhuma diferença foi encontrada.
1 Diferenças foram encontradas.
> 1 Ocorreu um erro.

Exemplos

  1. Para comparar dois arquivos, digite:
    diff chap1.back chap1
    Isto exibe as diferenças entre os arquivoschap1.bakechap1.
  2. Para comparar dois arquivos enquanto ignoram diferenças na quantidade de espaço em branco, digite:
    diff  -w prog.c.bak prog.c
    Se duas linhas diferirem apenas no número de espaços e tabulações entre as palavras, o comando diff -w as considerará iguais.
  3. Para criar um arquivo contendo comandos que o comando ed pode utilizar para reconstruir um arquivo a partir de outro, digite:
    diff  -e chap2 chap2.old >new.to.old.ed
    Isto cria um arquivo denominadonew.to.old.edque contém os subcomandos ed para alterarchap2voltar para a versão do texto encontrado emchap2.old. Na maioria dos casos,new.to.old.edé um arquivo muito menor do quechap2.old. Você pode salvar espaço em disco excluindochap2.old, e você pode reconstruí-lo a qualquer momento, inserindo:
    (cat new.to.old.ed ; echo '1,$p') | ed - chap2 >chap2.old
    Os comandos entre parênteses somam1,$paté o fim dos comandos de edição enviados para o editor ed . O1,$pfaz com que o comando ed escreva o arquivo para saída padrão após a edição dele. Esta sequência de comandos modificada é então pitada para o comando ed (| ed), e o editor o lê como entrada padrão. A sinalização - faz com que o comando ed não exiba o tamanho do arquivo e outras informações extras porque ele seria misturado com o texto dechap2.old.

Arquivos

Item Descrição
/usr/bin/diff Contém o comando diff .