Bash
如何通過 Unix 工具正確列舉 pdfjam?
我需要正確列舉命令
pdfjam *.pdf --nup 1x1
。手冊中沒有任何任務,pdfjam
所以pdfjoin
我正在考慮 Bash 方法和/或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
與
zsh
:(LC_ALL=C; pdfjam ./*.pdf(n) --nup 1x1)
會工作。
(n)
是數字排序的zsh
全域限定符。在 C 語言環境中,"5a "
排序後"5 G"
為空格排序之前a
。在其他一些語言環境中,"a "
可以排序之前," G"
因為空格和大小寫將在第一遍中被忽略(並且A
在之前G
)使用其他 shell 並在 GNU 或兼容系統上,您可以執行以下操作:
printf '%s\0' ./* | LC_ALL=C sort -t/ -znk2 | xargs -r0 sh -c 'pdfjam "$@" --nup 1x1' sh
請注意,如果文件列表太大,而使用該
zsh
方法時,您會收到一個錯誤,在這裡,它會執行幾個pdfjam
‘s,這可能也不是您想要的(並且可能不會被注意到)。而不是使用
LC_ALL=C
上面的方法來確保空間排序 beforea
,另一種方法可能是數字排序但在關係上,僅在第一個欄位上按詞法排序(根據語言環境規則):printf '%s\0' [0-9]* | sort -z -k1n -k1,1 | xargs -r0 sh -c 'pdfjam "$@" --nup 1x1' sh
如果在您的語言環境中忽略大小寫進行排序,這將允許
5a
在之前進行排序。不過之前還是會排序的。5B``05a``5
使用
bash
4.4 及更高版本,您還可以執行以下操作:readarray -td '' files < <( printf '%s\0' [0-9]* | sort -z -k1n -k1,1) pdfjam "${files[@]}" --nup 1x1