Obter soma de verificação do diretório no bash

2

Eu queria saber:

  1. É possível criar uma soma de verificação de um diretório (usando algo como md5sum)
  2. É possível recursivamente criar soma de verificação para cada arquivo dentro do diretório (e depois imprimi-lo)?
  3. Ou ambos?

Estou usando o bash

    
por drigler 10.09.2015 / 09:53

3 respostas

2

md5sum não terá diretório como entrada, no entanto

 tar cf - FOO | md5sum

irá verificar se um arquivo é alterado em qualquer lugar dentro do FOO, a soma de verificação mudará, mas você não terá qualquer indício de qual arquivo. A soma de verificação também será alterada se algum metadado do arquivo for alterado (permissões, timestamps,…).

Você pode considerar o uso de:

 find FOO -type f -exec md5sum {} \;  > FOO.md5

que irá md5 cada arquivo individualmente, e salva o resultado em FOO.md5. Isso facilita a verificação de qual arquivo foi alterado. Essa variante depende apenas do conteúdo do arquivo, não dos metadados.

    
por 10.09.2015 / 11:12
0

O ZFS cria essa soma de verificação, mas isso é somente para uso interno.

Para calcular uma soma de verificação de um objeto, você precisa ler este objeto e, para diretórios, isso não é permitido.

Muitos sistemas de arquivos retornam o erro EISDIR ao tentar ler (2) um diretório e o ZFS define o "tamanho" do diretório para o número de entradas nesse diretório em vez do número de bytes (o que você pode esperar quando você gosta de ler (2) um diretório).

O fato de alguns sistemas de arquivos ainda permitirem que você leia (2) diretórios é um bug - um artefato que sobrou dos anos 70, quando não havia uma chamada readdir ().

BTW: no meu WOFS, todos os diretórios têm tamanho 0, pois não possuem conteúdo de tipo de arquivo, porque os arquivos dizem em seus metadados "hey, estou neste diretório". Se você quer saber o que é o WOFS: todos os outros conceitos básicos do WOFS foram incorporados ao ZFS.

    
por 10.09.2015 / 10:09
0

1. Por que você precisa do md5sum no diretório? Se você quer ter certeza da consistência e / ou integridade do arquivo, pode editá-lo e fazer o hash do arquivo tar / tar.gz .

2.Se você tem subdiretórios, será um pouco mais difícil. Se você tiver apenas arquivos, tente isto como exemplo:

#!/bin/bash

for i in /home/{username}/Books/rhel/; do
  md5sum "$i"
done

Exemplo de saída:

dd7a684cc8668d208ca5dcf00bc58e8d  Red_Hat_Enterprise_Linux-6-Deployment...
775602071a1ec5a1ac1a99cee9d065fa  Red_Hat_Enterprise_Linux-7-High_Av..
    
por 10.09.2015 / 10:51