For 루프는 작동하지만 두 번 반복됩니다.

For 루프는 작동하지만 두 번 반복됩니다.

다음 코드를 실행 중입니다.

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/

관련 정보