Para classificar por tamanho, você pode usar os qualifiers glob de zsh
( zsh
é instalado por padrão no macOS, que costumava ser sh
lá):
#! /bin/zsh -
printf '%s\n' **/*.pdf(DoL)
-
**/
é recursão de globalização -
(DoL)
é um qualificador glob,D
para incluir arquivos de pontos (arquivos ocultos), poisfind
seria,oL
para classificar a lista gerada pelo arquivoL
ingth.
Note que -regex ".*/[^/].*.pdf
não faz muito sentido.
Corresponde, por exemplo, a /home/foo/pdf
, .*
on /home
, depois /
, depois [^/]
on f
então .*
on oo
, então .
on /
e, em seguida, pdf
.
Com -regex
, com ou sem -E
, você pode usar -regex '.*\.pdf'
para corresponder aos arquivos *.pdf
, mas também pode usar o padrão -name '*.pdf'
.
Você pode usar:
find . -name '*.pdf' -exec stat -f '%z %N' {} + |
sort -n |
cut -d ' ' -f 2-
Mas isso não funcionaria se houvesse caminhos de arquivo com caracteres de nova linha.
Com os utilitários GNU, você pode fazer:
find . -name '*.pdf' -printf '%s %pfind -L . \( ! -xtype l -o -prune \) -name '*.pdf' -printf '%s %p#! /bin/zsh -
printf '%s\n' **/*.pdf(DoL)
' |
sort -nz |
cut -zd ' ' -f 2- |
tr 'find . -name '*.pdf' -exec stat -f '%z %N' {} + |
sort -n |
cut -d ' ' -f 2-
' '\n'
' |
sort -nz |
cut -zd ' ' -f 2- |
tr 'find . -name '*.pdf' -printf '%s %pfind -L . \( ! -xtype l -o -prune \) -name '*.pdf' -printf '%s %p%pre%' |
sort -nz |
cut -zd ' ' -f 2- |
tr '%pre%' '\n'
' |
sort -nz |
cut -zd ' ' -f 2- |
tr '%pre%' '\n'
' '\n'
Observe que, se algum desses arquivos pdf
forem links simbólicos, será o tamanho do link simbólico considerado, e não o tamanho do destino do symlink. Para classificar o tamanho desse destino, altere DoL
para D-oL
ou adicione as opções -L
a stat
. E com o GNU find
:
Para correspondência sem distinção entre maiúsculas e minúsculas, substitua pdf
por [pP][dD][fF]
ou substitua -name
por -iname
(não padrão, mas suportado pelo GNU e BSD find
) ou por zsh
, ative a extendedglob
option e altere pdf
para (#i)pdf
ou ative a opção nocaseglob
.