Páginas

segunda-feira, 14 de setembro de 2009

Você conhece o comando diff?

(esta é uma dica rápida :D)

Oi gente!

Estava eu aqui em meu notebook quando me veio a cabeça que eu andava gravando arquivos de música repetidos em meus DVDs, daí comecei a repensar sobre os comandos da prova LPI101 (que trata muito sobre manipulação de streams texto), lembrei primeiramente do comando cmp, porém ele não seria útil para meu uso :s pois ele compara arquivos praticamente iguais entre si, com o cmp você poderia fazer isto:

$ vim arquivo1.txt

isto é apenas um teste
bobinho
para exemplo no dicas-l

$ vim arquivo2.txt

Isto é apenas um teste
bobinho
para exemplo no dicas-l

$ cmp arquivo1.txt arquivo2.txt
arquivo1.txt arquivo2.txt differ: byte 1, line 1

Ou seja o cmp me avisou que os dois arquivos são diferentes no primeiro byte da linha 1, ou seja, testo apenas se são diferentes. Porém com os conhecimentos que adquiri na LPI101 descobri que podemos fazer maravilhas com o formato texto! Aqui na minha casa eu salvo índices de DVDs usando apenas:

$ ls -laR /media/cdrom0 > indice.txt

Com este comando listarei recursivamente TODOS os arquivos e diretórios do diretório descrito (/media/cdrom0), daí para localizar arquivos que você gravou em algum n-ésimo :P DVD simplesmente você pode fazer uma busca no arquivo e descobrir em qual DVD você gravou o fujão, lembrando é claro que você terá que colocar o nome do DVD no arquivo de índice ou colocar um título antes de escrever tudo que tem dentro do DVD senão você não saberá qual N-ésimo DVD buscar na prateleira (uma caneta para escrever no DVD também ajuda :P).

Bom aí explicando o que fiz (finalmente)...
Eu precisava saber quais as músicas que baixei no meu notebook ainda não haviam sido gravadas nos meus backups (sei que backup em DVD é meio precário, mas são apenas músicas :P) daí veio a solução diff :D. Observem:

$ ls -laR /media/meubackup01 > ~/meus_backups

(tira o dvd1 e coloca o dvd2)

$ ls -laR /media/meubackup02 >> ~/meus_backups

(tira o dvd2 e coloca o dvd3)

$ ls -laR /media/meubackup03 >> ~/meus_backups

Aí você faz isso até que todos os backups (lembrando que quando me refiro a backups estou falando apenas dos nomes dos arquivos e diretórios contidos nos DVDs) tenham sido armazenados no seu arquivo meus_backups.

Depois simplesmente você gera um arquivo de texto novo com os arquivos/diretórios (no meu caso as músicas que estão no meu notebook) que você quer verificar (se estão gravados ou não) para isso:

$ ls -laR ~/musicas > ~/musicas_pc

Agora simplesmente usaremos o diff desta forma:

$ diff ~/musicas_pc ~/meus_backups

Explicando o resultado...

Os sinais de < significam que o arquivo só existe no arquivo ~/musicas_pc e os sinais de > significam que o arquivo só existe no arquivo ~/meus_backups. Com toda certeza a saída do diff pode ser tratada com filtros como o grep, o fgrep, o egrep, o tr, e etc mas isso pode ser tratado em uma nova dica!

Espero que a dica seja útil e vocês consigam organizar melhor seus arquivos pessoais, pois os meus eu acho facilmente mesmo tendo muuuuitos DVDs gravados!!

Usem a força do Shell!!

Abraço!! Até a próxima!!

Nenhum comentário: