여러 개의 jpeg 파일을 pdf 파일로 변환하려고 합니다.
인용된 파일 이름을 입력하면 모든 것이 정상입니다.
$ img2pdf "./Page 001.jpg" "./Page 002.jpg" -o book.pdf
와일드카드를 사용하면 img2pdf에 "./Page 001.jpg" 대신 "./Page"가 표시된다는 오류가 발생합니다.
IOError: [Errno 22] 잘못된 패턴('rb') 또는 파일 이름: '"./Page'
이것은 내가 사용하는 명령입니다:
$ img2pdf `find . -name "Page*.jpg" -printf "\"%p\" "` -o book.pdf
어떤 문제가 발생할 수 있나요?
당신의 도움을 주셔서 감사합니다
답변1
나는 당신이 bash에 있다고 가정합니다. 그래서... bash는 특정 문자를 구분 기호로 해석합니다. 기본값은 공백(공백, 탭, 줄바꿈)인 $IFS(Internal Field Separator) 환경 변수의 내용에 따라 다릅니다. 따라서 파일 이름에서 공백 문자를 찾으면 이를 구분 기호로 해석하고 파일 이름을 하나 이상의 부분으로 분할합니다(찾은 공백, 탭 또는 새 줄 수에 따라 다름).
해결책은 $IFS 값을 필요에 맞게 변경하는 것일 수 있습니다. 예를 들어, 귀하의 경우 개행 문자만 구분 기호로 해석되어야 합니다.
# first save current value
OLD_IFS=$IFS
# change value to something you need
IFS="\n"
# do what you need to do here
#############################
# restore default value of IFS
IFS=$OLD_IFS
자세한 내용은 이 문서를 참조하세요. IFS 참조
편집하다:
방금 img2pdf로 몇 가지 테스트를 수행했습니다. 다음 이름의 사진이 101개 있습니다.
이름_0.png, 이름_1.png, 이름_2.png, ..., 이름_100.png
test.pdf 파일에 넣기 위해 다음 명령을 사용했습니다.
img2pdf -o test.pdf name_{0..100}.png
이것에는 아무런 문제가 없습니다. 그런 다음 이름에 공백이 있는 파일에 대해 다음과 같이 또 다른 테스트를 수행했습니다.
이름0.png, 이름1.png, 이름2.png, ..., 이름100.png
명령은 다음과 같습니다(백슬래시를 통해 이스케이프된 공백 문자).
img2pdf -o test.pdf name\ {0..100}.png
이게 도움이 되길 바란다.