Como renomear arquivos sem extensão

Como renomear arquivos sem extensão

Eu tenho vários arquivos que devem ser renomeados programaticamente para serem compreensíveis pelo aplicativo.

Eles têm esta formatação: Arquivos a serem renomeados

Preciso cortar do final até o primeiro _ e substituir por um ponto(.).

Como não sei antecipadamente o comprimento do nome do arquivo nem os números de _ no nome do arquivo, você tem alguma ideia sobre awk/sed/cut ?

Responder1

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

Se a saída parecer correta, remova o echocomando acima.

O truque é ${F%_*}remover por último _26e ${F##*_}remover tudo antes do último _. Experimente estes comandos para ver como funciona. O delimitador agora é ::

echo "${PATH}"
echo "${PATH%:*}"
echo "${PATH##*:}"
echo "${PATH%:*}_${PATH##*:}"

Responder2

Usandosed

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

Remova o echose estiver satisfeito.

Responder3

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,\}\)$/.\1/' <<< $file )
  #alternatively numbers only as in given input sample
  mv $file $( sed 's/_\([0-9]\{1,\}\)$/.\1/' <<< $file )
done

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

informação relacionada