Como renomeio arquivos usando o nome do diretório?

2

Minha estrutura de arquivos agora é:

  • Entrada
    • 1
      • pre.nii
    • 2
      • pre.nii

Eu gostaria que fosse:

  • Entrada
    • 1_pre.nii
    • 2_pre.nii

Na pasta de entrada, tentei: for i in */pre.nii; do echo $i_pre.nii; done

Mas isso me deu:

    .nii
    .nii

Eu também tentei: for i in */pre.nii; do echo ${i%/*}; done que me deu:

    1
    2

Mas não consegui descobrir como usar o operador % string e adicionar o sufixo correto.

    
por Brent Womble 12.01.2016 / 20:17

2 respostas

4

Para substituir um / (com \ ) por _ :

for i in */pre.nii; do echo mv "$i" "${i/\//_}"; done

Se tudo estiver correto, remova echo .

    
por 12.01.2016 / 20:26
1

Eu costumo usar sed para fazer a substituição e testar antes de fazer alterações:

for i in */pre.nii;
do 
   j=$(echo $i | sed 's/\//_/')
   echo $j
done

execute-o

for i in */pre.nii;
do 
   j=$(echo $i | sed 's/\//_/')
   mv -v $i $j
done
    
por 13.01.2016 / 03:24