newname=${filename%_*}.${filename##*.}
${filename%_*}
dá a parte antes do último sublinhado.
${filename##*.}
te dá a parte depois do último ponto (a extensão).
Eu tenho um diretório com algumas milhares de imagens nele. A maioria deles tem nomes de arquivos sensíveis como SD-000.tif SD-001.tif BX-000.tif etc ...
No entanto, provavelmente ~ 25% deles têm nomes como BX-003_old.tif BX-004_veryold.tif
Como posso renomear os arquivos problemáticos removendo o _word do final de cada um?
Os arquivos são armazenados em um servidor FreeBSD, mas o diretório é compartilhado via samba.
Eu tentei usar combinações de sed e awk, mas não estou tendo sorte em fazer com que funcionem apenas no meio dos arquivos.
Alguém tem alguma ideia?
newname=${filename%_*}.${filename##*.}
${filename%_*}
dá a parte antes do último sublinhado.
${filename##*.}
te dá a parte depois do último ponto (a extensão).
Caso alguém acabe tendo um problema semelhante no futuro, acabei consertando isso com o comando cut. Eu corri:
for i in *
do
mv $i 'echo $i|cut -d"_" -f1'
done
O loop simplesmente seleciona todos os arquivos no diretório atual e o cut -d especifica para truncar tudo após o caractere especificado. No meu caso o _.
Tags rename batch-rename awk sed shell