Imagemagick을 사용하여 PDF를 지정된 디렉터리(매개 변수로 전달됨)의 이미지로 변환한 다음 해당 디렉터리의 하위 폴더에 변환을 저장하는 bash 스크립트를 작성하려고 합니다. 동일한 디렉토리에 완벽하게 변환하고 저장하는 스크립트가 있는데 경로를 추가하려고 하면 스크립트가 중단된 위치에 변환된 파일이 저장되기를 원합니다.
이것이 지금까지 나에게 효과적인 것입니다.
DIR="$@"
EXT="*.pdf"
mkdir -p "${DIR}images"
shopt -s nullglob
for pdffile in "$DIR"*.pdf; do
convert -density 300 -depth 8 -quality 90 -trim "${pdffile}" "${pdffile%.*}".jpeg
done
이것이 하위 폴더에 저장하려고 하는 것입니다. 다음과 같이 변환의 마지막 매개변수에 "images/..."를 추가하면:
DIR="$@"
EXT="*.pdf"
mkdir -p "${DIR}images"
shopt -s nullglob
for pdffile in "$DIR"*.pdf; do
convert -density 300 -depth 8 -quality 90 -trim "${pdffile}" "images/${pdffile%.*}".jpeg
done
스크립트를 실행하면 다음과 같은 일이 발생합니다.
$ ls foo
bar.pdf baz.pdf biz.pdf
$ ./pdf-to-img.sh foo/
convert-im6.q16: unable to open image `images/foo/bar.jpeg': No such file or directory @ error/blob.c/OpenBlob/2701.
convert-im6.q16: unable to open image `images/foo/baz.jpeg': No such file or directory @ error/blob.c/OpenBlob/2701.
convert-im6.q16: unable to open image `images/foo/biz.jpeg': No such file or directory @ error/blob.c/OpenBlob/2701.
내가 뭘 잘못했나요?
답변1
수정된 코드:
DIR="$@"
EXT="*.pdf"
mkdir -p "${DIR}/images"
shopt -s nullglob
for pdffile in "$DIR"*.pdf; do
convert -density 300 -depth 8 -quality 90 -trim "${pdffile}" "$(dirname "${pdffile}")/images/$(basename "${pdffile%.*}").jpeg"
done
images/foo/bar.jpeg
오류를 일으키는 경로를 다음으로 변환 해야 합니다 .foo/images/bar.jpeg
설명하다:
"foo/bar.pdf"
${pdffile}
변수에 이와 같은 값이 있습니다
dirname ${pdffile}
- 경로에서 슬래시가 아닌 마지막 구성 요소를 제거하고 다음을 남겨 둡니다."foo"
basename ${pdffile%}
- 대신 파일 이름을 제외한 모든 항목을 삭제하고 다음을 남겨 둡니다."bar.pdf"
$images
마지막으로 이 부분 사이에 하위 디렉터리 이름을 삽입하고 이미지를 저장하는 데 필요한 경로를 가져옵니다 foo/images/bar.jpeg
.