Para loop funciona, mas faz um loop duas vezes

0

Estou executando o seguinte código

for d in ./*/ ; do (cd "$d" && dcm2nii -n y -r y -x y -g n ../*/dicom/); done;

para executar o programa dcm2nii em todas as subpastas de ./*/ (todos eles são intitulados "dicom") e salvar a saída nas mesmas subpastas. O loop funciona, mas é executado duas vezes, criando arquivos de saída duplicados em cada subpasta "dicom". Curiosamente, se eu especificar caminhos absolutos em ambos os locais, mas com o caractere curinga * intacto para incluir todas as pastas dentro do diretório pai, o loop será executado apenas uma vez, conforme desejado. Como posso obter o loop para executar apenas uma vez usando caminhos relativos?

    
por focusbob 12.08.2016 / 17:55

1 resposta

2

Acho que você tinha duas subpastas ao testar / executar seu comando.

Seu código:

for d in ./*/ ; do (cd "$d" && dcm2nii -n y -r y -x y -g n ../*/dicom/); done;
  • primeiro entra em uma subpasta $d
  • então dcm2nii ... on ../*/dicom , que se traduz em: subpasta "dicom" de todas as pastas do superfolder
  • depois vai para a segunda subpasta e faz o mesmo

Tente isto:

for d in ./*/ ; do (cd "$d" && dcm2nii -n y -r y -x y -g n dicom/); done;

ou (possivelmente) isto:

dcm2nii -n y -r y -x y -g n ../*/dicom/
    
por 12.08.2016 / 18:35