Você pode usar awk
para isso:
for f in *; do
mv "$f" $(echo "$f" | awk -F, '{OFS=",";gsub(/_/, ":", $NF)}1')
done
Isso substituirá o _
por :
, mas somente no último campo delimitado por ,
:
-
-F,
conjuntosawk
s delimitador para,
-
OFS=",";
define o separador de campo de saída como,
-
gsub(...)
substitui todo_
por:
no último campo$NF
- O
1
no final é uma condição verdadeira, em queawk
imprime a linha inteira.
Editar : no Solaris, você precisa usar nawk
(que é o único awk
no sistema Solaris que possui a função gsub()
) em vez do antigo awk
:
for f in *; do
mv "$f" $(echo "$f" | nawk -F, '{OFS=",";gsub(/_/, ":", $NF)}1')
done
Editar 2 : para arquivos cujo mtime seja mais recente que 30 dias:
for f in *; do
[ $(stat -c %Y "") -gt $(expr $(date +%s) - 30 \* 86400) ] && \
mv "$f" $(echo "$f" | nawk -F, '{OFS=",";gsub(/_/, ":", $NF)}1')
done