Alterando o caso do enésimo caractere de um nome de arquivo usando Bash?

2

Eu tenho uma pasta de arquivos e quero alterar o caso de um de seus personagens na quinta posição.

A partir disso:

ABC-xyz
DEF-xyz
GHI-xys

Para isso:

ABC-Xyz
DEF-Xyz
GHI-Xys

Você notará que o X foi convertido para maiúsculas.

Alguma idéia de como eu faria isso no Bash?

    
por WackGet 28.05.2013 / 00:16

1 resposta

5

Exemplo puro de bash:

#!/usr/bin/env bash

for f in *; do
  g="${f::4}"  ##Split the first four characters
  h="${f:4:1}" ##just the fifth character (starts counting at 0)
  i="${f:5}"   ## character 6+ (again, counting from 0)
  mv -- "$f" "$g${h^^}$i"
    ##At the end, put the strings back together
    ##but make $h (character 5) uppercase
done
exit 0

Na realidade, eu provavelmente usaria perl-rename (chamado rename nos repositórios do Ubuntu; eu sei que em alguns outros ele usa prename ):

rename 's/(.{4})(.)/$1\u$2/' *
    
por 28.05.2013 / 01:18