January 4th, 2008Usando diff e patch pra agilizar seu trabalho
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.
January 10th, 2008 at 6:06 pm
Muito bom cara!!
Estava pesquisando alguma consulta em MySQL que não inserisse registros repetidos no banco de dados. Como é tudo esportado para um arquivo .SQL onde só me importam as diferenças para o último .SQL importado, essa solução veio à calhar!!
Grato amigo!!
E viva a liberdade!!
January 10th, 2008 at 6:09 pm
esportado com “s” ficou expetacular…
hauhuahuahua
March 21st, 2008 at 8:14 pm
DIFF E PATCH
Gostei muito da explicação dos comandos diff e patch, no entanto, tenho uma dúvida, como faço para comparar e atualizar um arquivo binário. Por ex.: arquivo. patch > arquivo.tar.bz2 ou tar.gz. É necessário utilizar alguma opção especial.
Agradeço pela atenção
April 7th, 2008 at 6:14 pm
Olha, eu não sei o funcionamento interno de arquivos comprimidos, como zip, rar, ou tarballs.
Não fiz nenhum teste, mas acredito que mesmo eles tendo sistemas internos de controle de integridade, o patch ainda funcionaria.
Você mesmo pode testar aí, criando diffs e aplicando patches neste tipo de arquivo, e depois nos dizer o resultado.
April 10th, 2008 at 6:42 pm
Quem está no windows pode ter esses recursos instalando o cygwin, o diff e patch!
Eu utilizei e funcionou!
Aí, parei de chupar o dedo. :)
September 2nd, 2008 at 11:55 am
esportado com “s” realmente doeu na alma!