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,Dpara incluir arquivos de pontos (arquivos ocultos), poisfindseria,oLpara classificar a lista gerada pelo arquivoLingth.
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 .