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
명령을 명령으로 바꾸고 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
위에서는 발견된 파일당 두 번씩 파일 이름이 출력되는 것을 볼 수 있습니다.