Gostaria de criar uma lista de soma de verificação md5 para todos os arquivos em um diretório.
Eu quero cat filename | md5sum > ouptput.txt
. Eu quero fazer isso em uma etapa para todos os arquivos no meu diretório.
Qualquer apoio seria bom.
command-line
Walter Wayne Leutwyler
fonte
fonte
Respostas:
Você pode passar
md5sum
vários nomes de arquivos ou expansões de bash:Se você quiser se divertir, pode usar coisas como
find
drill down e filtrar os arquivos, além de trabalhar recursivamente:fonte
md5sum
os arquivos dentro sub-diretórios, o acimamd5sum *
emissor de entrar em nível de subdiretório dizendo ... é um diretóriofind -type f -exec md5sum '{}' +
e `find -type f -exec md5sum '{}' 'eu consegui obtê-lo. Obrigado :)openssl md5 * > checklist.txt
**
recursivamente (como o zsh), é ainda mais simples:md5sum **/* 2>/dev/null
Um ótimo programa de criação / verificação de soma de verificação é o rhash. Ele cria até arquivos compatíveis com SFV e os verifica também.
Ele suporta md4, md5, sha1, sha512, crc32 e muitos outros.
Além disso, ele pode criar criação recursiva (opção -r) como md5deep ou sha1deep.
Por último, mas não menos importante, você pode formatar a saída do arquivo de soma de verificação; por exemplo:
gera um arquivo CSV, incluindo o caminho completo dos arquivos, iniciando recursivamente com o
/home
diretórioAcho extremamente útil até a opção -e renomear arquivos inserindo crc32 sum no nome.
Você pode alterar "md5sum" por "rhash" nos exemplos do PhoenixNL72.
fonte
Aqui estão dois exemplos mais abrangentes:
Crie um arquivo md5 em cada diretório que ainda não possua um, com caminhos absolutos:
Crie um arquivo md5 em cada pasta que ainda não possua um: sem caminhos, apenas nomes de arquivos:
O que difere entre 1 e 2 é a maneira como os arquivos são apresentados no arquivo md5 resultante.
Os comandos fazem o seguinte:
A saída desse script inteiro pode ser redirecionada para um arquivo (.....; done> test.log) ou canalizada para outro programa (como grep). A saída informará apenas quais diretórios foram ignorados e quais foram processados.
Após uma execução bem-sucedida, você terminará com um arquivo @ md5Sum.md5 em cada subdiretório do diretório atual
Chamei o arquivo de @ md5Sum.md5 para que ele seja listado na parte superior do diretório em um compartilhamento de samba.
A verificação de todos os arquivos @ md5Sum.md5 pode ser feita pelos seguintes comandos:
Depois, você pode grep o checklog.txt usando grep -v OK para obter uma lista de todos os arquivos que diferem.
Para gerar novamente um @ md5Sum.md5 em um diretório específico, quando você alterou ou adicionou arquivos, por exemplo, exclua o arquivo @ md5Sum.md5 ou renomeie-o e execute o comando generate novamente.
fonte
Eu encontrei esse problema e, embora as soluções acima sejam elegantes, eu queria um hack rápido e sujo para esta situação: 1 diretório, com subdiretórios um nível dentro dele.
Portanto, insira o diretório em um shell e execute:
Isso obtém todos os arquivos no diretório de nível superior, remove o aviso de erro sobre os subdiretórios que são diretórios e, em seguida, executa md5sums no conteúdo do subdiretório. Vantagem: fácil de lembrar, faz exatamente o que deve fazer. Eu sempre fico confuso com a sintaxe de encontrar e nunca consigo me lembrar dela de cima para baixo, então não há necessidade de fazer um loop etc, lidando com espaços nos nomes de diretório, esse liner funcionou bem. Não é uma solução poderosa e robusta, não é boa para mais de um nível de subdiretórios, mas é uma solução rápida e fácil para o problema.
fonte