com zsh :
(LC_ALL=C; pdfjam ./*.pdf(n) --nup 1x1)
funcionaria. (n) é um zsh Qualificador glob para classificação numérica. Na localidade C, "5a " ordena após "5 G" à medida que o espaço é classificado antes de a . Em algumas outras localidades, "a " poderia classificar antes de " G" porque os espaços e maiúsculas e minúsculas seriam ignorados na primeira passagem (e A vem antes de G )
Com outras shells e em sistemas GNU ou compatíveis, você poderia fazer:
printf '%sprintf '%sreadarray -td '' files < <(
printf '%s(LC_ALL=C; pdfjam ./*.pdf(n) --nup 1x1)
' [0-9]* | sort -z -k1n -k1,1)
pdfjam "${files[@]}" --nup 1x1
' [0-9]* | sort -z -k1n -k1,1 |
xargs -r0 sh -c 'pdfjam "$@" --nup 1x1' sh
' ./* | LC_ALL=C sort -t/ -znk2 |
xargs -r0 sh -c 'pdfjam "$@" --nup 1x1' sh
Observe que, se a lista de arquivos for muito grande, com a abordagem zsh , você receberia um erro, aqui, ela executaria vários pdfjam , o que provavelmente não é o que você deseja (e poderia permanecer despercebido).
Em vez de usar LC_ALL=C acima para garantir que o espaço seja classificado antes de a , outra abordagem poderia ser ordenar numericamente, mas em empates, classificar lexicalmente (conforme as regras de localidade) apenas no primeiro campo:
printf '%sprintf '%sreadarray -td '' files < <(
printf '%s%pre%' [0-9]* | sort -z -k1n -k1,1)
pdfjam "${files[@]}" --nup 1x1
' [0-9]* | sort -z -k1n -k1,1 |
xargs -r0 sh -c 'pdfjam "$@" --nup 1x1' sh
' ./* | LC_ALL=C sort -t/ -znk2 |
xargs -r0 sh -c 'pdfjam "$@" --nup 1x1' sh
Isso permitiria 5a classificar antes de 5B se o caso fosse ignorado para classificação em sua localidade. 05a ainda classificaria antes de 5 .
Com bash 4,4 e acima, você também pode fazer: