O comando diff compara o conteúdo de dois arquivos e relata a diferença entre eles. Mas, o comando não
compara apenas arquivos,
também pode comparar diretórios ou pastas, e até arquivos compactados com gzip diretamente.
Sabendo das possibilidades, vamos agora então conhecer melhor o comando, pois a saída dele não é exatamente o que se pode chamar de amigável.
Sintaxe: diff [opções] [arquivo1] [arquivo2]
Opções:
Para os exemplos criei, dois arquivos com listas da feira e listo eles abaixo com o comando cat:
cat lista1
diff lista1 lista2
Vejamos:
2c2 // o primeiro número é a linha, no caso a linha 2, da lista1 que deve ser modificada e a letra "c" é de change ou trocar em português.
< Alface // o símbolo menor que "<" indica que deve ser retirada a informação que lhe segue.
--- // aqui separa da informação a ser substituída.
> Alface americana // o símbolo maior que ">" indica que deve ser incluída a informação.
4d3 // continuando na linha 4 devemos deletar "d" a informação
< Cebola // o símbolo menor que "<" indica que deve ser retirada a informação que lhe segue.
7a7 // por fim, na linha 7 devemos adicionar "a" a informação
> Figo // o símbolo maior que ">" indica que deve ser incluída a informação.
Traduzindo: na linha 2 trocamos Alface por Alface americana, na linha 4 devemos apagar a Cebola e na linha 7, devemos incluir o Figo.
Agora, se quiséssemos saber quais modificações necessárias para que a lista2 ficasse como a lista1, o comando e a resposta ficariam assim:
diff lista2 lista1
Lembrando que também podemos guardar as diferenças em um terceiro arquivo, chamado, por exemplo, "difere". Assim:
diff lista1 lista2 > difere
Uma das opções que chama a atenção é "-y", que compara formando duas colunas, talvez não seja muito eficiente para arquivos de 15000 linhas, mas para nossas listas aqui, o resultado é interessante:
diff -y lista1 lista2
diff lista1.gz lista2.gz
zdiff lista1.gz lista2.gz
Veja como ficou o comando e o resultado:
diff pasta1/ pasta2/
Fontes:
Sabendo das possibilidades, vamos agora então conhecer melhor o comando, pois a saída dele não é exatamente o que se pode chamar de amigável.
Sintaxe: diff [opções] [arquivo1] [arquivo2]
Opções:
- -i :: ignora as diferenças de letras maiúsculas/minúsculas.
- -E :: ignora as diferenças de tabulação.
- -b :: ignora diferenças na quantidade de espaço em branco.
- -w :: ignora qualquer espaço em branco.
- -B :: ignora linhas em branco a mais ou a menos.
- -a :: compara os arquivos como arquivos de texto, ainda que não sejam.
- -u [n] :: mostra [n] linhas do conteúdo final do arquivo1, adicionadas as diferenças do arquivo2.
- -q :: mostra apenas se o conteúdo dos arquivos são ou não diferentes.
- -y :: mostra os arquivos em duas colunas, indicando as diferenças.
- -t :: expande as tabulações, convertendo-as em espaços, na saída.
- -r :: compara recursivamente todo o conteúdo de um diretório.
- -S [arquivo] :: quando comparar diretórios, inicia a comparação pelo arquivo especificado.
Para os exemplos criei, dois arquivos com listas da feira e listo eles abaixo com o comando cat:
cat lista1
Lista da feira Alface Beterraba Cebola Caqui Damasco Espinafre Goiabacat lista2
Lista da feira Alface americana Beterraba Caqui Damasco Espinafre Figo GoiabaO comando reporta, basicamente, o que tem que ser alterado no arquivo1, o primeiro na sintaxe, para que fique igual ao arquivo2. Então, se seguirmos a lógica e a ordem numérica colocando a lista1 primeiro, teremos o seguinte:
diff lista1 lista2
2c2 < Alface --- > Alface americana 4d3 < Cebola 7a7 > FigoPodemos dizer que a saída mostra que, para a lista1 ficar igual à lista2, devemos fazer algumas alterações.
Vejamos:
2c2 // o primeiro número é a linha, no caso a linha 2, da lista1 que deve ser modificada e a letra "c" é de change ou trocar em português.
< Alface // o símbolo menor que "<" indica que deve ser retirada a informação que lhe segue.
--- // aqui separa da informação a ser substituída.
> Alface americana // o símbolo maior que ">" indica que deve ser incluída a informação.
4d3 // continuando na linha 4 devemos deletar "d" a informação
< Cebola // o símbolo menor que "<" indica que deve ser retirada a informação que lhe segue.
7a7 // por fim, na linha 7 devemos adicionar "a" a informação
> Figo // o símbolo maior que ">" indica que deve ser incluída a informação.
Traduzindo: na linha 2 trocamos Alface por Alface americana, na linha 4 devemos apagar a Cebola e na linha 7, devemos incluir o Figo.
Agora, se quiséssemos saber quais modificações necessárias para que a lista2 ficasse como a lista1, o comando e a resposta ficariam assim:
diff lista2 lista1
2c2 < Alface americana --- > Alface 3a4 > Cebola 7d7 < FigoTraduzindo: na linha 2, trocar Alface americana por Alface, entre as linhas 3 e 4 incluir a Cebola, que passará a ser a nova linha 4 e na linha 7, retirar o Figo.
Lembrando que também podemos guardar as diferenças em um terceiro arquivo, chamado, por exemplo, "difere". Assim:
diff lista1 lista2 > difere
Uma das opções que chama a atenção é "-y", que compara formando duas colunas, talvez não seja muito eficiente para arquivos de 15000 linhas, mas para nossas listas aqui, o resultado é interessante:
diff -y lista1 lista2
Lista da feira Lista da feira Alface | Alface americana Beterraba Beterraba Cebola < Caqui Caqui Damasco Damasco Espinafre Espinafre > Figo Goiaba Goiaba
Comparando arquivos compactados
Compactei as listas para testarmos se o resultado será o mesmo com os arquivos compactados, e o resultado do comando foi:diff lista1.gz lista2.gz
Os arquivos binários lista1.gz e lista2.gz são diferentesOpa! Não era o que eu esperava, o comando apenas disse que os arquivos são diferentes. É que, para comparar os arquivos compactados, temos que usar o zdiff:
zdiff lista1.gz lista2.gz
2c2 < Alface --- > Alface americana 4d3 < Cebola 7a7 > FigoAgora sim, recebemos a resposta esperada.
Comparando pastas
O que o comando faz neste caso, é comparar o conteúdo das pastas, quais arquivos uma tem e a outra não. Para isso, coloquei os arquivos que utilizamos anteriormente nesta dica, na pasta1 e na pasta2, eu omiti um deles e acrescentei um estranho.Veja como ficou o comando e o resultado:
diff pasta1/ pasta2/
Somente em pasta1/: difere Somente em pasta2/: lista3Como podemos deduzir, eu omiti o arquivo "difere" e incluí o arquivo "lista3", daí o comando disse que existe o arquivo "difere" somente na pasta1 e o "lista3", somente na pasta2.
Fontes:
- diff man pages
- http://www.thegeekstuff.com
- http://www.vivaolinux.com.br
- http://www.wikibooks.org
- Spartanix
0 comentários:
Postar um comentário