Como aparar o número final do arquivo via shell script?

0

Eu tenho os arquivos abaixo. Existem quatro arquivos no total:

cert1.pem chain1.pem fullchain1.pem privkey1.pem

Eu quero cortar o número final de cada arquivo ( 1 aqui). Como eu uso um script de shell para lidar com isso automaticamente? Estou familiarizado com alguns comandos, mas acho que não sou bom em escrever scripts de shell para lidar com esse processamento em lote.

    
por jefferyear 05.07.2018 / 17:12

1 resposta

4

Se o número à direita for um único dígito e todos forem arquivos .pem , você poderá usar a expansão de parâmetro para remover o dígito e a extensão e substituir a extensão:

for file in cert1.pem  chain1.pem  fullchain1.pem  privkey1.pem
do
  mv "$file" "${file%%?.pem}.pem"
done

A expansão de parâmetro funciona removendo a correspondência final mais longa ( %% ) de qualquer caractere único ( ? ) seguido por .pem ; depois disso, adicionamos manualmente o .pem no final.

Observe que isso também renomeia arquivos como certX.pem ou fullchain-.pem , porque o caractere ? se expande para qualquer caractere único.

Isso fica mais seguro no exemplo acima, porque listei manualmente os arquivos para renomear. Você poderia alternativamente usar algo como:

for file in *1.pem
do
  mv "$file" "${file%%?.pem}.pem"
done

... que faz loops explicitamente sobre arquivos com 1.pem no final de seus nomes.

Configuração:

$ ls
cert1.pem  chain1.pem  fullchain1.pem  privkey1.pem

Execução:

$ for file in cert1.pem  chain1.pem  fullchain1.pem  privkey1.pem
  do 
    mv "$file" "${file%%?.pem}.pem"
  done

Resultado:

$ ls
cert.pem  chain.pem  fullchain.pem  privkey.pem
    
por 05.07.2018 / 17:47