Sei que muitos de vocês provavelmente sentiram falta dos meus posts. Muita coisa pra fazer, coisa pra estudar, coisa pra pensar. Tentei um concurso público, não fiquei entre os 3 primeiros (sim, 3 vagas) e cá estou eu novamente. E já volto falando de duas ótimas ferramentas que descobri recentemente no linux: diff e patch. Sinto muito, usuários de Windows, mas vocês ficarão chupando o dedo.

Com arquivos muito grandes, se você quiser atualizá-los você normalmente precisa criar uma nova versão deste arquivo, com as mudanças. Acontece que nesta nova versão, muita informação é repetida. Tudo que não foi mudado acaba sendo repetido. Imagine um arquivo de 2Mb, onde vc mudou apenas o equivalente a 5Kb de informação nele. Normalmente você teria que enviar um novo arquivo completo com os 2Mb pra todo mundo que precisa ter a nova versão. Com as ferramentas diff e patch, você pode fazer diferente.

Um método mais prático não seria poder enviar apenas um arquivo contendo informações sobre as mudanças realizadas no arquivo, e deixar o computador realizar as modificações necessárias? Pois isso é possível, com estes dois recursos do linux. Para entender melhor, vou dar um exemplo.

Criamos uma lista de frutas, e chamamos o arquivo de frutas1.txt. Nele, colocamos o seguinte conteúdo:

Banana
Uva
Limão

Criamos então um segundo arquivo chamado frutas2.txt, com o conteúdo do frutas1, mas adicionando uma nova fruta no final da lista:

Banana
Uva
Limão
Melancia

O comando diff nos permitir descobrir a diferença entre dois arquivos, e esta diferença é feita de um modo que o linux pode entender também. Digitando “diff frutas1.txt frutas2.txt” temos o seguinte resultado:

3a4
> Melancia

Interessante, não? Ele encontrou exatamente a diferença entre os dois arquivos e descreveu esta diferença. O mais interessante é que podemos exportar essa diferença para um arquivo de texto. Assim temos o que queríamos ali em cima, um arquivo contendo apenas as informações do que foi alterado, sem ter que repetir todo o conteúdo. Isto é feito com o seguinte comando:

diff frutas1.txt frutas2.txt > diferenca.001.patch

Assim criamos o arquivo diferenca.001.patch contendo as informações sobre as alterações em um arquivo. Então, a qualquer momento, podemos usar este arquivo de patch para aplicar estas informações no arquivo original. Para isso usamos o comando patch disponível no linux, da seguinte forma:

patch frutas1.txt < diferenca.001.patch

Se checarmos o conteúdo do arquivo de texto frutas1.txt novamente, veremos que ele contém as quatro frutas, ou seja, tornou-se idêntico ao arquivo frutas2.txt.

Este recurso é uma ótima ferramenta para desenvolvedores, principalmente se você vai trabalhar com diferentes versões de seus projetos. Outra grande utilidade, por exemplo, é se você estiver criando um projeto open-source que aceitará ajuda de terceiros. Em vez de ter que enviar uma nova versão de um arquivo, outras pessoas poderiam colaborar enviando apenas o patch. Este recurso possui mil e uma utilidades, basta que você dê a ele um bom uso.

No related posts.