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