Estou basicamente procurando arquivos e depois classificar pelo tamanho. O script funciona se eu não classificar o tamanho por ser humano legível. Mas eu quero que o tamanho seja legível para humanos. Como posso classificar tamanhos que são legíveis por humanos?
Por exemplo:
ls -l | sort -k 5 -n | awk '{print $9 " " $5}'
Isso funciona como esperado, recebi o tamanho dos meus arquivos em bytes ascendentes:
1.txt 1
test.txt 3
bash.sh* 573
DocGeneration.txt 1131
andres_stuff.txt 1465
Branches.xlsx 15087
foo 23735
bar 60566
2016_stuff.pdf 996850
Agora, quero que o tamanho seja legível por humanos, então adicionei um parâmetro -h ao LS e agora alguns arquivos estão fora de ordem:
ls -lh | sort -k 5 -n | awk '{print $9 " " $5}'
1.txt 1
DocGeneration.txt 1.2K
andres_stuff.txt 1.5K
test.txt 3
Branches.xlsx 15K
foo 24K
bar 60K
bash.sh* 573
2016_stuff.pdf 974K
Tentar
sort -h k2
Faz parte do gnu sort, BSD sort e outros.
ls
Essa funcionalidade é incorporada, use a-S
opção e classifique na ordem inversa:ls -lShr
Como nenhuma concha específica foi mencionada, veja como fazer tudo na
zsh
concha:O
**
padrão do Glob corresponde,*
mas/
em nomes de caminho, ou seja, como uma pesquisa recursiva faria.O
ls
comando permitiria tamanhos legíveis humanos-h
e formato de saída de lista longa-l
. A-f
opção desativa a classificação, entãols
apenas listaria os arquivos na ordem em que recebem.Este pedido é organizado pelo
**/*(.Lk-1024oL)
padrão de globbing de nome do arquivo para que os arquivos menores sejam listados primeiro. O**/*
bit corresponde a todos os arquivos e diretórios neste diretório e abaixo, mas(...)
modifica o comportamento do globo (é um "qualificador global").É
oL
o final que ordena (o
) os nomes por tamanho do arquivo (L
, "comprimento").O
.
no início faz com que o glob corresponda apenas a arquivos regulares (sem diretórios).O
Lk-1024
bit seleciona arquivos cujo tamanho é inferior a 1024 kb ("Comprimento em KB menor que 1024").Se
zsh
não for seu shell interativo principal, você poderá usarUse
setopt GLOB_DOTS
(ouzsh -o GLOB_DOTS -c ...
) para corresponder também a nomes ocultos. ... ou apenas adicioneD
à string do qualificador glob.Expandindo o acima, supondo que você deseja uma saída de 2 colunas com nomes de caminho e tamanhos legíveis por humanos, e também supondo que você tenha
numfmt
do GNU coreutils,ou, mais rápido,
Se você
sort
não tiver a-h
opção, você poderá usar um comando (embora muito longo) como o seguinte:Isso classificará sua saída em bytes e, em seguida, os converterá em seu tamanho legível por humanos posteriormente.
Isso funcionaria?
O primeiro
awk
EXP procurará os arquivos menores que 1m e o segundo receberá o tamanho do byte do resultado e o converterá no KB e imprime os 3 primeiros elementos para fornecer um tamanho legível pelo homem.