A resposta de Glenn é boa; aqui está um refinamento para vários arquivos:
md5sum file1 file2 file3 | # or *.txt, or whatever
while read -r sum filename; do
mv -v "$filename" "$sum"
done
Se você estiver gerando arquivos com find
ou similar, poderá substituir a invocação md5sum
por algo como find . <options> -print0 | xargs -0 md5sum
(com a saída também canalizada para o loop do shell).
Isso está tomando a saída de md5sum
, que consiste em várias linhas com uma soma e, em seguida, no arquivo ao qual corresponde e em um loop de shell que lê cada linha e emite um comando mv
que renomeia o arquivo do nome original para a soma. Todos os arquivos com somas idênticas serão sobrescritos; no entanto, salvo circunstâncias incomuns (como se você estivesse brincando com colisões de hash do md5), isso significa que eles tinham o mesmo conteúdo, para que você não perdesse nenhum dado de qualquer maneira. Se você precisar introduzir outras operações em cada arquivo, poderá colocá-las no loop, consultando as variáveis $filename
e $sum
, que contêm o nome do arquivo original e a soma MD5, respectivamente.