처리할 PDF 파일의 순서를 반대로 바꿉니다.

처리할 PDF 파일의 순서를 반대로 바꿉니다.

컨텍스트: Catalina = zsh(선호) 또는 16.04 Ubuntu = bash

qpdf를 들면 다음과 같습니다.

# To merge (concatenate) all the pages of a list of PDF files and save the result as a new PDF:
qpdf --empty --pages <file1.pdf> <file2.pdf> <file3.pdf> -- <output.pdf>

특정 디렉터리에 있는 .pdf 파일 집합(파일 이름에 공백 포함)이 연결됩니다.

# Concatenate Drafts file to ../concatDrafts.pdf   (76 pdf files)
# https://stackoverflow.com/a/53754681/4953146
qpdf --empty --pages *.pdf -- out.pdf

하지만qpdf주문하다.pdf 파일을 연결하려면 .pdf 파일을 역순으로 연결해야 합니다. 처리할 파일의 순서는 다음과 같이 반환됩니다.

ls -r.pdf

.pdf 파일 이름의 공백을 처리하려면: xargs 연구다음 사항이 필요함을 나타냅니다.

ls -r *.pdf | xargs -E '\n'

ls의 출력을 명령 내의 명령으로 파이프하는 사고 과정은 무엇입니까 qpdf?

답변1

그 내용은 zsh다음과 같습니다.

qpdf --empty --pages ./*.pdf(On) -- output.pdf

On하나는 어디에 있습니까?글로벌 예선확장 을 통해 역순으로 글로브를 정렬합니다 o(대문자 O, 소문자는 직접을 의미함) n.

n이름을 숫자로 정렬하기 위해 glob 한정자를 추가할 수도 있습니다 .

qpdf --empty --pages ./*.pdf(nOn) -- output.pdf

비교하다:

$ print -r ./*.pdf(On)
./file3.pdf ./file2.pdf ./file1.pdf ./file11.pdf ./file10.pdf
$ (LC_ALL=C; print -r ./*.pdf(On))
./file3.pdf ./file2.pdf ./file11.pdf ./file10.pdf ./file1.pdf

(어휘적으로는 문자열을 비교할 때 첫 번째 근사치에 대한 구두점(여기)을 무시하는 로케일 이전에도 file10.pdf마찬가지 입니다.)file2.pdffile1.pdf.

그리고:

$ print -r ./*.pdf(nOn)
./file11.pdf ./file10.pdf ./file3.pdf ./file2.pdf ./file1.pdf

후자는 숫자 비교를 수행하는 일련의 십진수인 with 로 인해 file10.pdf수행됩니다 (이것은 GNU 또는 GNU가 수행하는 것과 유사합니다).file3.pdfnls -vsort -V

답변2

답변을 활용하시면 됩니다쉘 매개변수를 어떻게 바꾸나요?*.pdf확장된 콘텐츠를 반전합니다 . 먼저 이를 쉘에 대한 위치 인수로 저장하십시오.

set -- *.pdf

그런 다음 연결된 질문에 대한 좋은 답변을 사용하십시오. 나는 선택한다이것:

flag=''; for a in "$@"; do set -- "$a" ${flag-"$@"}; unset flag; done

이제 "$@"원하는 대로 확장해 보세요. 원하는 명령과 함께 이것을 사용하십시오.

qpdf --empty --pages "$@" -- out.pdf

이전 위치 매개변수를 잃지 않으려면 서브셸에서 이 세 가지 명령을 실행하세요.

답변3

(GNU bash 쉘용)

tac역방향 매개변수 목록을 사용할 수 있습니다 xargs. 실행한 명령 의 경우 qpdf끝에 두 개의 추가 인수인 --및 를 결합해야 했습니다.out.pdf

여기서는 개행 문자가 매개변수 구분 기호로 사용됩니다. 즉, 개행 문자가 있는 파일 이름은 처리되지 않습니다.

printf "%s\n" "out.pdf" "--" *.pdf | tac | xargs -d'\n' qpdf --empty --pages

여기에서는 파일 이름에 대해 null 구분 기호를 사용합니다.

printf "%s\0" "out.pdf" "--" *.pdf | tac -s $'\0' | xargs -0 qpdf --empty --pages

(Linux의 GNU Bash 쉘)을 테스트했는데 예상한 역순으로 파일을 연결했습니다.

관련 정보