você está aqui: Home  → Arquivo de Mensagens Workshop Gratuito: Os Segredos do Shell, com o Prof. Julio Neves

Você conhece o comando diff?

Colaboração: Rafael Henrique da Silva Correia

Data de Publicação: 30 de Setembro de 2009

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 pois 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 DVD simplesmente você pode fazer uma busca no arquivo e descobrir em qual DVD você gravou o fujão. É 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).

Bom, aí explicando o que fiz (finalmente)... Eu precisava saber quais 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) daí veio a solução diff. 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

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!!

Blog do autor

Galera contribuam com a Tradução do projeto Debian!!! A gente precisa de ajuda na mailing-list!! Você aprenderá bastante traduzindo!! Aí vai o link para os interessados: http://www.debian.org/international/l10n/po-debconf/pt_BR#


Veja a relação completa dos artigos de Rafael Henrique da Silva Correia