Eu preciso md5 o nome do arquivo de um diretório de arquivos

0

Eu preciso pegar o md5sum do nome do arquivo de um diretório. Talvez algo ao longo das linhas de:

mv *.html md5sum(*).html

Alguém pode me apontar na direção certa sobre qual tipo de comando eu preciso executar para fazer isso?

    
por richardwhitney 10.10.2016 / 06:00

1 resposta

2

Talvez algo como:

for i in *.html
do
    echo mv "$i" "$(md5sum <<<"${i%.html}" | awk '{print $1".html"}')"
done

${i%.html} no bash é o conteúdo da variável i (o nome do arquivo atual), com .html removido do final. awk '{print $1".html"}' imprime o primeiro campo da saída, com .html anexado a ele. Precisamos disso, pois md5sum adiciona um - à saída, já que está lendo da entrada padrão:

$ md5sum <<<foo
d3b07384d113edec49eaa6238ad5ff00  -
$ md5sum <<<foo | awk '{print $1}'
d3b07384d113edec49eaa6238ad5ff00

Exemplo:

$ for i in *.html
do
 echo mv "$i" "$(md5sum <<<"${i%.html}" | awk '{print $1".html"}')"
done
mv default.html de2b14ae7499f90736fc4a92327553a5.html
mv page.html 2adf521149526dde524f030851c7f903.html
mv post.html 0c0d03edf4e145ffd75eafb6d73deaa7.html

Remova o echo para realmente mover os arquivos depois de verificar se o comando funciona bem.

Se você quiser o efeito de echo -n , poderá usá-lo:

for i in *.html
do
    echo mv "$i" "$(echo -n "${i%.html}" | md5sum | awk '{print $1".html"}')"
done
    
por muru 10.10.2016 / 06:20