pdfjam의 Unix 도구를 통해 어떻게 올바르게 열거합니까?

pdfjam의 Unix 도구를 통해 어떻게 올바르게 열거합니까?

올바른 명령 열거가 필요합니다 pdfjam *.pdf --nup 1x1. 매뉴얼에는 아무것도 없기 pdfjam때문에 pdfjoinBash 방법 및/또는 방법을 고려하고 있습니다 find. 일부 중복을 생략한 올바른 열거가 없는 실패 출력의 예

ls -1 *
10 Heart Disorders.pdf
11 Red Blood Cell Disorders.pdf
...
19 Kidney Disorders.pdf
1 Cell Injury.pdf
20 Lower Urinary Tract and Male Reproductive Disorders.pdf
21 Female Reproductive Disorders and Breast Disorders.pdf
2 Inflammation and Repair.pdf
4 Water.pdf
5a Prematurity and intrauterine growth retardation.pdf
5 Genetic and Developmental Disorders.pdf
6 Environmental Pathology.pdf
...
9 Vascular Disorders.pdf

예상 출력

1
2 
...
5
5a
... 
10
11
...
20
21

5...한 가지 과제는 및 의 존재입니다 5a....

운영 체제: 데비안 8.7

답변1

그리고 zsh:

(LC_ALL=C; pdfjam ./*.pdf(n) --nup 1x1)

작동합니다. (n)zsh 글로벌 예선숫자 정렬에 사용됩니다. C 로케일에서는 공백이 앞에 정렬되고 "5a "공백이 끝에 정렬됩니다. 일부 다른 로케일에서는 첫 번째 패스에서 공백과 대소문자가 무시되고 그 앞에 나타나기 때문에 먼저 정렬하는 것이 가능합니다."5 G"a"a "" G"AG

다른 쉘과 GNU 또는 호환 시스템의 경우 다음을 수행할 수 있습니다.

printf '%s\0' ./* | LC_ALL=C sort -t/ -znk2 |
  xargs -r0 sh -c 'pdfjam "$@" --nup 1x1' sh

파일 목록이 너무 크면 zsh이 방법을 사용할 때 오류가 발생하여 여러 개를 실행하게 되는데 pdfjam, 이는 원하는 결과가 아닐 수도 있고 눈치채지 못할 수도 있습니다.

LC_ALL=Cbefore before 공백이 정렬되도록 위의 방법을 사용하는 대신, 대안은 a숫자로 정렬하지만 관계를 기준으로 정렬하고 첫 번째 필드에서만 어휘적으로 정렬하는 것입니다(로케일 규칙에 따라).

printf '%s\0' [0-9]* | sort -z -k1n -k1,1 |
  xargs -r0 sh -c 'pdfjam "$@" --nup 1x1' sh

정렬 시 해당 로케일의 대소문자를 무시하는 경우 5a이전 정렬이 허용됩니다. 하지만 그 전에는 여전히 정렬됩니다.5B05a5

bash버전 4.4 이상 에서는 다음을 수행할 수도 있습니다.

readarray -td '' files < <(
  printf '%s\0' [0-9]* | sort -z -k1n -k1,1)
pdfjam "${files[@]}" --nup 1x1

관련 정보