Pular para o conteúdo

Comparar arquivos de uma pasta com arquivos de outra pasta [RESOLVIDO]

Responder tópico
  • Denunciar
  • Indicar
01 02

1. Comparar arquivos de uma pasta com arquivos de outra pasta [RESOLVIDO]

Enviado em 28/01/2009 - 16:34h

Estou precisando de um script que compare o conteudo de uma pasta com outra pasta, informando os arquivos que não existem e os arquivos que são diferentes.
Exemplo:
pasta1 => arquivos: arq1 / arq2 / arq3 / arq4
pasta2 => arquivos: arq1 / arq2 / arq3

depois da comparação devolver:

- arquivos que não existem:
arq4

- arquivos diferentes:
arq2
arq3

obs: com a possibilidade de gerar um arquivo txt com o resultado.
a sintaxe seria: compara pasta1 pasta2

Responder tópico

3. Re: Comparar arquivos de uma pasta com arquivos de outra pasta [RESOLVIDO]

Enviado em 28/01/2009 - 16:41h

cmp

Compara dois arquivos de qualquer tipo (binário ou texto). Os dois arquivos especificados serão comparado e caso exista diferença entre eles, é mostrado o número da linha e byte onde ocorreu a primeira diferença na saída padrão (tela) e o programa retorna o código de saída 1.

cmp [arquivo1] [arquivo2] [opções]

Opções:

arquivo1/arquivo2
Arquivos que serão comparados.
opções
-l
Mostra o número do byte (hexadecimal) e valores diferentes de bytes (octal) para cada diferença.
-s
Não mostra nenhuma diferença, só retorna o código de saída do programa.

Use o comando zcmp para comparar diretamente arquivos binários/texto compactados com gzip.

Exemplo: cmp teste.txt teste1.txt.

4. Hoje eu uso o comando cmp

Enviado em 28/01/2009 - 17:01h

rafael.wzs eu já utilizo o comando cmp, o meu problema é que nas pastas existem vários arquivos. Comparar um a um é o problema. Gostaria de saber como eu posso utilizar este comando em um script sem ter que especificar o nome dos arquivos. A ideia seria que o script verificaria os arquivos na pasta1 automaticamente e compararia com a pasta2.
Obrigado pela atençao. Ainda estou engatiando na criar script.

5. Re: Comparar arquivos de uma pasta com arquivos de outra pasta [RESOLVIDO]

Enviado em 28/01/2009 - 17:07h

Ata, entendi, você pode usar o diff.

6. comando diff

Enviado em 28/01/2009 - 17:19h

Rafael, o comando diff é utilizado para comparar arquivos txt, no meu caso a comparação tem que ser binaria o comando ideal seria cmp. O problema é fazer o script. O script teria que ler a pasta1 arquivo por arquivo automaticamente e comparar com os arquivos da pasta2 exibindo só o nome dos arquivos diferentes.

7. Re: Comparar arquivos de uma pasta com arquivos de outra pasta [RESOLVIDO]

Enviado em 28/01/2009 - 17:42h

Então creio eu que o melhor seria fazer um loop com o for para percorrer todos os arquivos, e comparar com o outro arquivo de outra pasta.

10. CMP ou diff?

Enviado em 28/01/2009 - 20:11h

Ora, eu não vi diferença significativa. É errado dizer que o diff só serve para txt. Ele compara binários TAMBÉM. Se ele não identificar o arquivo como TEXTO, apenas ele não irá imprimir as diferenças, apenas o status: se iguais ou diferentes. O diff tem tantos parâmetros que dá até para pedir que ele mostre as diferenças (por sua conta e risco, pois a tela ficará suja com caracteres binários). Logo, o diff pode ser usado tranquilamente.

A única "vantagem" que vi do cmp é que ele diz qual linha e qual byte houve a primeira diferença, mas não entendo como esta informação pode vir a ser útil em arquivos binários.

Em relação ao desempenho, par dois arquivos IDÊNTICOS de 600M o cmp levou a melhor:
$ time diff lixo1.bin lixo2.bin

real 0m1.487s
user 0m1.040s
sys 0m0.432s

$time cmp lixo1.bin lixo2.bin

real 0m1.328s
user 0m0.836s
sys 0m0.476s

Mas quando um dos arquivos tem uma diferença no FIM o diff levou a melhor:

$time cmp lixo1.bin lixo3.bin
cmp: Fim de arquivo (EOF) em lixo1.bin

real 0m1.309s
user 0m0.876s
sys 0m0.428s

$ time diff lixo1.bin lixo3.bin
Os arquivos lixo1.bin e lixo3.bin são diferentes

real 0m0.005s
user 0m0.000s
sys 0m0.004s

E olha a ENORME DIFERENÇA!
(neste caso o lixo3.bin é um byte maior. Acho que o diff usou isto para dizer que são diferentes sem precisar percorrer o arquivo. Seria inteligente...)

11. como executar o script

Enviado em 29/01/2009 - 10:54h

Elgio, baixei o script só que não consigo executar o mesmo. Ao executar recebo a mensagem:"bash: comparaPasta.sh: command not found."
Eu segui o seguinte procedimento:
baixei o script executei o comando: chmod +x comparaPasta e mesmo assim recebi a mensagem acima.
Eu ainda estou engatinhando no linux. Qual foi o meu erro na execução do script?

12. Re: Comparar arquivos de uma pasta com arquivos de outra pasta [RESOLVIDO]

Enviado em 29/01/2009 - 11:06h

Baixaste de onde?

Pode ser que no processo de download ele tenha sido erroneamente convertido para TEXTO DOS, com quebras de linha CR+LF ao invés de apenas LF.

Se tu usas o vim, podes abrir ele no vim só para ver se ele identifica como dos (ele coloca a string [dos] ao lado do nome).

Se for isto tu precisas (a) baixar novamente, talvez aqui no VOL ou (b) converter,

A maioria das distribuições tem o utilitário dos2unix nativo para fazer isto:

elgio@didake:~> dos2unix comparaPasta.sh
dos2unix: converting file comparaPasta.sh to UNIX format ...
elgio@didake:~>

(podes executar o dos2unix mesmo que o arquivo não seja dos. Nada de errado acontece)

Se não for isto, pode ser o #!/bin/bash no inicio. Talvez este não seja o caminho do teu bash (muito raro que não seja). De qualquer maneira um:

elgio@didake:~> which bash
/bin/bash
elgio@didake:~>

vai te revelar onde está na tua distro. Se não for /bin/bash (for /usr/bin/bash por exemplo) precisas editar o script e trocar no #!/bin/bash para o correto.
01 02

Responder tópico

Responder tópico

Entre na sua conta para responder.

Fazer login para responder