Comparar arquivos no Ubuntu

Hoje arrumei um bom exemplo para a pergunta pra que usar a linha de comando no meu computador? Para mim a resposta é: para poder usar mini-utilitários e outras traquitanas que você podem ser criadas rapidamente.

Para gravar meus CDs e DVDs eu uso o K3b (que oficialmente é para KDE mas funciona sem problema no Gnome, como a maioria dos programas para KDE). Não sei se por culpa do modelo de gravador ou do software, se eu peço para ele verificar a gravação ao terminar ele dá aquela ejetadinha no disco, puxa de novo e começa a comparar (não lembro se o Nero faz a mesma coisa). Isso nem sempre funciona redondo e o programa acusa erro de leitura.

Não muito a fim de jogar fora a mídia e tentar de novo (perdendo tempo e dinheiro, muquirana que sou) fiz um scriptzeco para comparar todos os arquivos do CD com os originais do HD. Isso é feito com o comando cmp, que apesar do nome “comando” nada mais é do que um programinha-sem-tela. Aliás foi assim que o “Linux” nasceu: com um monte de malucos criando versões abertas dos comandinhos legais do Unix, o projeto GNU.

Como o cmp só compara arquivo por arquivo (cmp a.txt b.txt) eu precisava de uma maneira de ir arquivo por arquivo fazendo a comparação. Assim como Neston existem 1001 maneiras de fazer isso. Em bash, por exemplo, eu faria um loop entre todos os arquivos, etc. etc. Mas como o meu negócio é Ruby resolvi fazer o seguinte:

#! /usr/local/bin/ruby
Dir.new('/media/cdrom0').each do |f|
  if !(f =~ /^./)
    puts f
    puts `cmp /media/cdrom0/#{f} ./#{f}`
  end
end

Seis linhas resolvem o meu problema. Imagine fazer isso com interface gráfica. Pode até ser fácil para alguns, mas seria o proverbial matar mosca com tiro de canhão. E eu não poderia publicar assim fácil no meu blog, para quem quiser sair usando. E, claro… como coloquei o código fonte você pode rodar isso com nenhuma ou poucas modificações em outros Unix, no OSX e provavelmente até no Windows.


:: Escrito por Cristiano Dias, dia 16 Nov 2006, 11:20, em Informática de vez em quando é bom, Nêeerd!.

5 Comentários

  1. Ronaldo

    Bom exemplo do Ruby. Sobre o motivo de um CD ser ejetado antes da comparação, o motivo está nos caches agressivos usados pelos fabricantes. Sem ejetar, a comparação é incorreta porque o buffer recém-gravado é comparado com sua origem. Ejetar limpa o cache e permite uma comparação real.

    16 Nov 2006, 13:18, via Mozilla Firefox Mozilla Firefox 2.0 no Windows Windows XP
  2. Celso

    Sobre o k3b, posso dizer que muito provavelmente deve ser com o seu drive - uso o programa há anos, em 02 distribuições diferentes, com 03 drives diferentes, e nunca tive problema com a verificação do cd.

    17 Nov 2006, 07:08, via Mozilla Firefox Mozilla Firefox 2.0 no Windows Windows 98
  3. Glacial

    É por isso que eu uso o GnomeBaker … ;)

    Eu procuro não instalar nada “K” no meu ubuntu (questão de gosto e padronização hehehe), mas infelizmente não deu pra fugir do amaroK … o bichim é bom pra caramba … ;)

    17 Nov 2006, 08:42, via Mozilla Firefox Mozilla Firefox 2.0 no Ubuntu Linux Ubuntu Linux
  4. Cristiano Dias

    É Celso, pelo que o Ronaldo falou deve ser o drive mesmo. Vou ver se o k3b tem uma configuração para ser menos apressadinho. ;-)

    Glacial, o Amarok é hoje daqueles programas indispensáveis. Fora que quando estou usando Windows (e ouvindo músicas no Winamp) me vejo procurando a tecla Windows-C pra dar pause, ehehe.

    Eu posso estar enganado, mas acho que o k3b já veio como padrão do Ubuntu, não?

    17 Nov 2006, 08:45, via Mozilla Firefox Mozilla Firefox 2.0 no Ubuntu Linux Ubuntu Linux
  5. Glacial

    Não lembro se no Drapper era o k3b como padrão. No Edgy vem o gnomeBaker como default.

    Voltando ao amaroK, além das globalhotkeys, ele foi o único que trabalhou direito no quesito sync com iPobre. Sem contar com o trilhão de scripts (leia-se: plugins) que tem pra ele. :)

    (Tô no windows porque to no trampo hehehe)

    17 Nov 2006, 14:19, via Mozilla Firefox Mozilla Firefox 2.0 no Windows Windows XP

Deixe seu comentário

Acompanhe os comentários via RSS.

© 2000-2008 Cristiano Dias. Alguns direitos reservados. Só alguns, não se preocupe.
Based on a tbeseda & 5ThirtyOne design.
RSS