Recentemente, eu estava com uma estrutura de arquivos em diversos diretorios e subdiretorios e todos eles ja estavam com os respectivos hashes MD5 armazenados em um arquivo texto (hash.md5) no diretorio raiz. Bastava executar o comando "md5sum -c hash.md5" na raiz para a ferramenta verificar a integridade de todos os arquivos.Entretanto, resolvi reorganizar a localizacao dos arquivos, mudando os arquivos de subdiretorios, criando diretorios novos etc. Eram os mesmos arquivos so que agora estavam em caminhos de diretorios diferentes. Com isso, apos estas mudancas, o arquivo texto com os hashes MD5 tambem precisava ser atualizado para os novos caminhos dos arquivos.Algumas solucoes poderiam ser aplicadas. Uma seria recalcular todas as somas MD5, gerando novamente os hash de todos os arquivos, mas esta solucao iria expor novamente o disco rigido em um uso intenso. Eram muitos gigabytes de dados armazenados. Outra solucao seria editar o arquivo texto com os hashes, alterando cada linha para o novo caminho do respectivo arquivo. Mas era um arquivo com 1650 linhas e fazer isso manualmente torna impraticavel, levaria uma eternidade.Contudo a segunda era a solucao que deveria ser aplicada, afinal os hashes dos arquivos ja estavam gerados e so precisava atualizar os caminhos. O que poderia executar esta tarefa rapidamente? Simples, um script no interpretador de comandos.A seguir, esta o codigo do script que realizou a atualizacao dos caminhos, de cada arquivo, nas linhas do arquivo texto com os hashes MD5. E um script para o interpretador de comandos Bash, do Linux.O que ele faz e, primeiramente, uma copia de seguranca do arquivo texto com os hashes. Depois sera lida cada linha deste arquivo, onde serao armazenados em variaveis o hash (incluindo os espacos) que esta no inicio da linha e o nome do respectivo arquivo, ignorando o caminho antigo. Entao sera realizada uma busca pelo arquivo e seu caminho atual e armazenado em outra variavel. Por fim, as strings com o hash e o caminho atual sao concatenadas e direcionadas para um novo arquivo texto com os hashes MD5.#!/bin/bash#cp -f hash.md5 hashantigo.md5while read LINHAdo HASH=`echo "$LINHA" | cut -c 1-34` ARQUIVO=`echo "$LINHA" | sed 's/^.\{34\}//' - | sed 's/.*\///' -` NOVODIR=`find */ -iname "$ARQUIVO" -type f -print` if [[ $NOVODIR ]] then echo "$HASH""$NOVODIR" >> novohash.md5 fidone < hashantigo.md5mv -f novohash.md5 hash.md5echo "Feito!"Este script torna o processo muito mais rapido e menos traumatico no acesso ao disco. Nesta reorganizacao, eu tambem separei os arquivos em volumes de aproximadamente 4.4 GB (capacidade de DVDs) pois foram gravados em midias oticas. Cada volume tinha o seu "diretorio raiz" com uma copia do arquivo texto original com os hashes e o script. O script foi executado para cada volume. Por isso a necessidade do if no script, alguns arquivos nao estavam no respectivo volume.Sao diversos comandos do Bash, internos e externos, utilizados neste script. As paginas manuais de cada um deles podem ajudar no entendimento de sua execucao. No Android 4.2, as opcoes do desenvolvedor estao escondidas por padrao. Para mostra-las e necessario ir ate a tela "Configuracoes -> Sistema -> Sobre o telefone" e tocar sete vezes em