다음 코드를 실행 중입니다.
for d in ./*/ ; do (cd "$d" && dcm2nii -n y -r y -x y -g n ../*/dicom/); done;
./*/(제목은 모두 "dicom"임)의 모든 하위 폴더에서 dcm2nii 프로그램을 실행하고 출력을 동일한 하위 폴더에 저장합니다. 루프는 작동하지만 두 번 실행되어 각 "dicom" 하위 폴더에 중복 출력 파일이 생성됩니다. 흥미롭게도 두 위치 모두에 절대 경로를 지정하고 상위 디렉터리의 모든 폴더를 포함하기 위해 와일드카드 *를 그대로 두면 루프는 필요할 때 한 번만 실행됩니다. 루프가 한 번만 실행되도록 하려면 상대 경로를 어떻게 사용합니까?
답변1
명령을 테스트/실행할 때 2개의 하위 폴더가 있는 것 같습니다.
귀하의 코드:
for d in ./*/ ; do (cd "$d" && dcm2nii -n y -r y -x y -g n ../*/dicom/); done;
- 먼저 하위 폴더로 이동하세요.
$d
- 그런 다음 슈퍼 폴더에 있는 모든 폴더의 하위 폴더 "dicom"으로 번역되어 실행됩니다
dcm2nii ...
.../*/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/