
다음 코드를 사용하여 JPEG 압축 DICOM을 디코딩합니다.
find ./* -maxdepth 0 -name '*.dcm' -printf 'dcmdjpeg %p %p \n' | sh
이 파일이 포함된 모든 폴더에서 이 코드를 실행합니다.
문제는 상위 폴더와 해당 상위 폴더 내에 하위 폴더 목록이 있다는 것입니다. 각 하위 폴더에는 최소 2000개의 DICOM(파일)이 포함되어 있습니다. 이 코드를 상위 폴더에 한 번 적용하여 모든 하위 폴더에서 동시에 실행되도록 하려면 어떻게 해야 합니까?
답변1
이 find
명령에는 스위치가 있습니다. 그것은 알려져 있습니다 -exec
.
$ find . -name '*.dcm' -exec dcmdjpeg {} {} \;
그러면 find
발견된 파일 이름이 로 대체 됩니다 {}
. 따라서 위에서는 모든 파일 이름에 대해 이 작업을 수행합니다.
dcmdjpeg file1.dcm file1.dcm
dcmdjpeg file2.dcm file2.dcm
...
파일 이름에 공백이 있는 경우 다음 방법을 사용할 수 있습니다.
$ find . -name '*.dcm' -exec dcmdjpeg "{}" "{}" \;
무슨 일이 일어났는지 봐
dcmdjpeg
command를 command로 바꾸고 echo
위의 명령을 실행하면 실행될 파일 이름을 확인할 수 있습니다.
이 샘플 데이터가 있다고 가정해 보겠습니다.
$ tree
.
|-- 1
| |-- 1.dcm
| |-- 1\ space.dcm
| |-- 2.dcm
| `-- 3.dcm
|-- 1.dcm
|-- 2
| |-- 1.dcm
| |-- 1\ space.dcm
| |-- 2.dcm
| `-- 3.dcm
|-- 2.dcm
|-- 3
| |-- 1.dcm
| |-- 1\ space.dcm
| |-- 2.dcm
| `-- 3.dcm
`-- 3.dcm
이제 파일 이름의 공백을 처리하는 두 번째 예제를 실행하면 다음과 같습니다.
$ find . -name '*.dcm' -exec echo "{}" "{}" \;
./2.dcm ./2.dcm
./1/2.dcm ./1/2.dcm
./1/3.dcm ./1/3.dcm
./1/1 space.dcm ./1/1 space.dcm
./1/1.dcm ./1/1.dcm
./3.dcm ./3.dcm
./1.dcm ./1.dcm
./2/2.dcm ./2/2.dcm
./2/3.dcm ./2/3.dcm
./2/1 space.dcm ./2/1 space.dcm
./2/1.dcm ./2/1.dcm
./3/2.dcm ./3/2.dcm
./3/3.dcm ./3/3.dcm
./3/1 space.dcm ./3/1 space.dcm
./3/1.dcm ./3/1.dcm
위에서 발견된 각 파일의 파일 이름이 두 번 에코되는 것을 볼 수 있습니다.