이 줄은 각 하위 디렉터리로 이동하고, 그 안의 각 이미지를 하위 디렉터리와 동일한 이름의 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)