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: