imagemagick이 하위 디렉터리에서 파일을 찾을 수 없습니다

imagemagick이 하위 디렉터리에서 파일을 찾을 수 없습니다

이 줄은 각 하위 디렉터리로 이동하고, 그 안의 각 이미지를 하위 디렉터리와 동일한 이름의 pdf로 병합한 다음 상위 디렉터리로 이동해야 합니다.

for d in ./*/ ; do (cd "$d" && convert *.jpg(n) "$d.pdf" && mv $d.pdf .); done

이건 오류야

zsh: no matches found: *.jpg(n)
zsh: no matches found: *.jpg(n)
convert: unable to open image './dir/-0': No such file or directory @ error/blob.c/OpenBlob/3497.

답변1

./*/glob을 사용하고 있으므로 $d다음과 같은 내용이 포함되어 ./dir/실행됩니다 convert *.jpg(n) ./dir/.pdf && mv ./dir/.pdf .. 또한 .이것은현재의디렉토리가 아닌부모(지금 바로 ..).

여기서는 다음과 같은 것을 원합니다:

for dir (./*(/)) (convert $dir/*.jpg(n) $dir.pdf)

여기서 우리는 사용하고 있습니다(/) 글로벌 예선파일 형식 선택목차(-/)(또한 포함하려면 다음으로 변경하십시오.디렉토리에 대한 심볼릭 링크당신의 방법과 같습니다 */).

숨겨지지 않은 jpg 파일이 없는 디렉토리의 경우 오류가 발생하지만 서브쉘을 사용하고 있으므로 서브쉘만 종료됩니다.

오류를 피하려면 먼저 jpg 파일이 있는지 확인할 수 있습니다. 예를 들면 다음과 같습니다.

for dir (./*(/)) {
  files=($dir/*.jpg(Nn)) # N for nullglob
  (($#files == 0)) || convert $files $dir.pdf
}

또는 익명 함수를 사용하십시오.

for dir (./*(/)) (){(($# == 0)) || convert $* $dir.pdf} $dir/*.jpg(Nn)

관련 정보