Я выполняю следующий код
for d in ./*/ ; do (cd "$d" && dcm2nii -n y -r y -x y -g n ../*/dicom/); done;
для того, чтобы выполнить программу dcm2nii во всех подпапках ./*/ (все они озаглавлены "dicom") и сохранить результат в этих же подпапках. Цикл работает, но выполняется дважды, создавая дубликаты выходных файлов в каждой вложенной папке "dicom". Интересно, что если я указываю абсолютные пути в обоих местах, но с подстановочным знаком *, чтобы включить все папки в родительском каталоге, цикл запускается только один раз, как и требуется. Как я могу заставить цикл запускаться только один раз, используя относительные пути?
Я полагаю, у вас было 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/