img2pdf 및 파일 이름의 공백을 처리하는 데 문제가 있습니다.

img2pdf 및 파일 이름의 공백을 처리하는 데 문제가 있습니다.

여러 개의 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

이게 도움이 되길 바란다.

관련 정보