For loop работает, но зацикливается дважды

Я выполняю следующий код

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

для того, чтобы выполнить программу dcm2nii во всех подпапках ./*/ (все они озаглавлены "dicom") и сохранить результат в этих же подпапках. Цикл работает, но выполняется дважды, создавая дубликаты выходных файлов в каждой вложенной папке "dicom". Интересно, что если я указываю абсолютные пути в обоих местах, но с подстановочным знаком *, чтобы включить все папки в родительском каталоге, цикл запускается только один раз, как и требуется. Как я могу заставить цикл запускаться только один раз, используя относительные пути?

0
13.08.2016, 03:07
1 ответ

Я полагаю, у вас было 2 подпапки во время тестирования / выполнения вашей команды.

Ваш код:

for d in ./*/ ; do (cd "$d" && dcm2nii -n y -r y -x y -g n ../*/dicom/); done;
  • сначала входит в подпапку $ d
  • , затем выполняет dcm2nii ... на ../*/ dicom , что переводится как : подпапка "dicom" всех папок суперпапки
  • затем переходит во вторую подпапку и делает то же самое

Попробуйте следующее:

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

или (возможно) это:

dcm2nii -n y -r y -x y -g n ../*/dicom/
2
28.01.2020, 02:34

Теги

Похожие вопросы