Renomeia toda extensão de arquivo no diretório

4

Eu sou novo em scripts e tenho um diretório com todos os arquivos nomeados num.pdb.ostat. Eu gostaria de renomear todos num.ostat (que está excluindo o .pdb em todos). Para um único arquivo, isso funciona:

mv 2.pdb.ostat 2.ostat

mas quando eu tento fazer isso para todos os arquivos na pasta com este script

for num in ./*; do mv ${num}.pdb.ostat ${num}.ostat; done

nada acontece

Alguém pode me dizer onde eu errei?

    
por Ditte 09.03.2015 / 10:16

3 respostas

5

${num} recebe o nome do arquivo inteiro. Você precisa obter o nome do arquivo sem extensão e adicionar sua nova extensão. Você pode fazer uma formatação de string. Use o seguinte comando:

for num in ./*; do mv ${num} ${num%.*.*}.ostat ; done

% exclui a correspondência mais curta de $ substring da parte de trás de $ string.

    
por Esref 09.03.2015 / 10:51
4

Para solucionar o seu script, tente substituir mv por echo . Você verá que sua variável ${num} contém o nome do arquivo completo , por exemplo %código%. Portanto, seu script essencialmente tenta executar

mv ./2.pdb.ostat.pdb.ostat ./2.pdb.ostat.ostat

Em vez disso, você precisa truncar o nome do arquivo apenas para o número primeiro. por exemplo,

for filename in ./*; do num="$(echo "${filename}" | grep -o '^./[0-9]*')"; echo "${num}.pdb.ostat" "${num}.ostat"; done

Depois de confirmar que a sintaxe está correta, você pode alterar o 2.pdb.ostat para um echo e, na verdade, mover os arquivos. ou seja,

for filename in ./*; do num="$(echo "${filename}" | grep -o '^./[0-9]*')"; mv "${num}.pdb.ostat" "${num}.ostat"; done

No entanto, a maneira mais fácil é usar (perl) renomear.

rename 's/pdb.//' *.pdb.ostat –

Veja mv para mais informações.

    
por Sparhawk 09.03.2015 / 10:26
0

Aqui, um script baseado em respostas anteriores. Encontre todos os arquivos no diretório com o nome ' Igua ' e renomeie todos os arquivos, incluindo a extensão correta

#!/bin/bash
for file in *Igua*
do
  let "i++"
  fileext=${file##*.}
  mv "$file" "Iguazu_$i.$fileext"
done
    
por Elkin Arroyo-Negrete 30.10.2017 / 19:08

Tags