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...

オペレーティングシステム:Debian 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

おすすめ記事