Como renomear arquivos sem extensão

0

Eu tenho um monte de arquivos que devem ser renomeados programaticamente para serem compreensíveis pelo aplicativo.

Eles têm essa formatação:

Eu preciso cortar do final até o primeiro _ e substituí-lo por um ponto (.).

Como eu não sei por avanço o comprimento do nome do arquivo nem o número de _ no nome do arquivo, você tem alguma idéia através do awk / sed / cut?

    
por admstg 03.10.2016 / 18:20

3 respostas

3

for F in *_*; do echo mv -- "${F}" "${F%_*}.${F##*_}"; done

Se a saída parece correta, remova o comando echo de cima.

O truque é que ${F%_*} remove o último _26 e ${F##*_} remove tudo antes do último _ . Tente estes comandos para ver como funciona. O delimitador é agora : :

echo "${PATH}"
echo "${PATH%:*}"
echo "${PATH##*:}"
echo "${PATH%:*}_${PATH##*:}"
    
por 03.10.2016 / 18:34
1

Usando sed

for file in *_*
do 
    echo mv $file $( sed 's/\(.*\)_/\./' <<< $file)
done

Remova o echo se estiver satisfeito.

    
por 03.10.2016 / 21:06
0

Você pode substituir o último bloco por sed , usando o marcador de fim de linha ( $ ).

#/bin/bash
for file in *_* ; do
  #any alphanumeric string as suffix
  mv $file $( sed 's/_\([A-Za-z0-9]\{1,\}\)$/./' <<< $file )
  #alternatively numbers only as in given input sample
  mv $file $( sed 's/_\([0-9]\{1,\}\)$/./' <<< $file )
done

AFAIK o \{1,\} bit como "um ou mais" da lista anterior é GNU sed - mas não tenho 100% de certeza desta restrição.

    
por 03.10.2016 / 21:00

Tags