Para solucionar o seu script, tente substituir mv
por echo
. Você verá que sua variável ${num}
contém o nome do arquivo completo , por exemplo %código%. Portanto, seu script essencialmente tenta executar
mv ./2.pdb.ostat.pdb.ostat ./2.pdb.ostat.ostat
Em vez disso, você precisa truncar o nome do arquivo apenas para o número primeiro. por exemplo,
for filename in ./*; do num="$(echo "${filename}" | grep -o '^./[0-9]*')"; echo "${num}.pdb.ostat" "${num}.ostat"; done
Depois de confirmar que a sintaxe está correta, você pode alterar o 2.pdb.ostat
para um echo
e, na verdade, mover os arquivos. ou seja,
for filename in ./*; do num="$(echo "${filename}" | grep -o '^./[0-9]*')"; mv "${num}.pdb.ostat" "${num}.ostat"; done
No entanto, a maneira mais fácil é usar (perl) renomear.
rename 's/pdb.//' *.pdb.ostat –
Veja mv
para mais informações.