
Preciso encontrar o maior arquivo no diretório atual e subsequente. tentei
ls -Rlh | awk '{print $3 " " $5 " " $9}'
mas não sei se está tudo bem, como classificar e selecionar o arquivo maior.
Responder1
GNUfind
+sort
+head
solução (para qualquer nível de profundidade de diretório), assumindo que os caminhos dos arquivos não contêm caracteres de nova linha:
find . -type f -printf "%s %p\n" | sort -nr | head -1
%s
- especificador de formato apontando para o tamanho do arquivo (em bytes)%p
- especificador de formato apontando para o nome do arquivosort -nr
- classificar registros numericamente em ordem inversahead -1
- imprimir a primeira linha/registro TOP
Para obter umlegível por humanosvalor do tamanho do arquivo - estenda o pipeline com numfmt
o comando GNU (se compatível):
find . -type f -printf "%s %p\n" | sort -nr | head -1 | numfmt --to=si
Responder2
Com zsh
, para o maior arquivo regular:
ls -ld -- **/*(.DOL[1])
(é claro que você pode substituir ls -ld --
por qualquer comando. Se estiver usando GNU ls
ou compatível, veja também a -h
opção paratamanhos legíveis por humanos)
.
: apenasregulararquivos (não diretórios, links simbólicos, dispositivos, fifos...)D
: inclui os ocultos e desce para diretórios ocultosOL
: ordenado inversamente por tamanho (L
ength).[1]
: apenas a primeira partida.
Se houver empates, você obterá qualquer um deles aleatoriamente. Se você quiser o primeiro em ordem alfabética, adicione um extra on
( o
rder by n
ame) para classificar os empates em ordem alfabética.