De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Julio Cezar Neves
Data de Publicação: 16 de agosto de 2023
Direto ao que interessa… Eu tenho os dois arquivos idiotas a seguir:
$ cat arqA Tomar leite à noite me ajuda a dormir Porque dormir faz bem à saúde Gosto também de ir ao cinema, desde que esteja com alguém interessante. $ cat arqB Tomar vinho à noite me ajuda a dormir Porque dormir faz bem à saúde Gosto também de ir à praia, desde que esteja com alguém interessante. Afinal é melhor só que mal acompanhado.
Cujas diferenças são:
$ diff arqA arqB
1c1
< Tomar leite à noite me ajuda a dormir
—-
> Tomar vinho à noite me ajuda a dormir
3c3
< Gosto também de ir ao cinema,
—-
> Gosto também de ir à praia,
4a5
> Afinal é melhor só que mal acompanhado.
1c1 |
Trocar (c ) a linha 1 de arqA pela pela linha 1 de arqB excluindo (< ) o texto e incluindo (> ) o outro texto; |
3c3 |
Idêntico ao anterior, com relação à linha 3 de ambos; |
4a5 |
Acrescentar (a ) após a linha 4 de arqA , a linha 5 de arqB |
É importante observar que, quando diff
está descrevendo essas diferenças,
está dizendo como alterar o primeiro arquivo para fazê-lo corresponder ao
segundo arquivo. Para constatar, vamos alterar a ordem dos arquivos:
$ diff arqB arqA
1c1
< Tomar vinho à noite me ajuda a dormir
—-
> Tomar leite à noite me ajuda a dormir
3c3
< Gosto também de ir à praia,
—-
> Gosto também de ir ao cinema,
5d4
< Afinal é melhor só que mal acompanhado.
Repare que a ordem das setas (<
>
) se inverteram e a última linha agora está assim:
5d4
– Deletar (d
) a linha 5 de arqB
equiparando até a linha 4 de arqA
Por esses dois exemplos que vimos, deduzimos que:
Letra | Corresponde |
---|---|
a |
Incluir linha após (append) |
c |
Alterar linha (change) |
d |
Remover linha (delete) |
Uma outra forma de usar o diff que gera uma saída parecida com a dos comandos sdiff e comm (acho este último melhor) é com a opção -y. Veja:
$ diff -y Num1 Num2
1 <
2 2
3 3
> 4
Com a opção -y
, o diff
cria uma tabela com os arquivos e insere setas
mostrando o que deve ser incluído ou excluído do primeiro arquivo. Neste
exemplo, deve-se excluir (<
) a linha que tem o número 1
e após a linha
que tem o 3
, deve-se inserir (>
) uma linha com 4
.
Podemos também comparar binários:
$ diff Comp1.odp Comp2.odp
Os arquivos binários ``Comp1.odp`` e ``Comp2.odp`` são diferentes
Para comparar aquivos compactados, podemos usar o zdiff
que usa as mesmas
regras do diff
nesse tipo de arquivo.
Para comparar diretórios:
$ touch temp1/{arqA,arqB} temp2/{arqB,arqC}
$ diff temp1 temp2
Somente em temp1: arqA
Somente em temp2: arqC
Algumas vezes dois arquivos diferem somente nos espaços em branco, podemos
evitar que isso que esta diferença seja acusada com o uso da opção -b
.
$ diff <(echo ' ') <(echo ' ') &> /dev/null &&
echo Iguais || echo Diferentes
Diferentes
$ diff -b <(echo ' ') <(echo ' ') &> /dev/null &&
echo Iguais || echo Diferentes
Iguais
Esse não é o único programa para comparações de arquivos, mas é o mais
usado. Existem outros, mas em seguida pretendo mostrar também os comandos
cmp
(que é mais apropriado para uso em scripts) e comm
. Então até lá.
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários