Como eu determino qual arquivo Linux é maior em uma lista de opções?

4
$ ls -l
drwsrwsrwt 2  caine caine 4096 2017-01-10 13:21 10050
-rw-r--r-- 10 caine caine 4096 2017-01-19 11:29 10051
drwxr-xr-x 20 caine    18 8096 2017-01-19 11:29 10052
drwxr-xr-x 21 11    caine 4096 2017-01-19 11:29 10053
drwxr-xr-x 22 caine    22 4096 2017-01-19 11:29 10054
-rw-r--r-- 14 caine caine   50 2017-01-19 11:29 10055

Com base no exposto acima, como faço para descobrir qual tamanho de arquivo é o maior? Foi-me dito que a resposta é 10051, mas não consigo descobrir o porquê. Existe um método específico que eu possa usar para descobrir qual arquivo é o maior dado apenas as informações acima?

    
por Toy 27.10.2017 / 20:49

4 respostas

11

ls -l outputs 7 colunas: digite & permissões, número de links, proprietário, grupo, tamanho, hora da modificação e nome. (Isso está documentado para o GNU ls na página de informações; veja info ls , escolha "Quais informações estão listadas" no menu e role para baixo até -l . Alternativamente, info ls 'long ls format' deve levá-lo diretamente).

Então você olha para a primeira coluna (tipo & permissões), a primeira letra informa o tipo: você tem d para diretórios e - para arquivos comuns. Portanto, existem apenas dois arquivos: 10051 e 10055. Então você olha para a quinta coluna (tamanho) e um é 4096 bytes, o outro é de 50 bytes - é claro que é maior.

Naturalmente, todos esses diretórios podem conter alguns arquivos, e o tamanho total desses arquivos pode ser maior. ls mostra o tamanho do diretório em si (se você pensar sobre isso, faz sentido que "o que está em um diretório" seja dado, e assim deve ser armazenado em algum lugar, embora no Unix os nomes de arquivos são armazenados como parte do diretório também), não de seu conteúdo - um dos diretórios em si (10052) é maior.

Se você quiser saber os tamanhos dos diretórios, incluindo os arquivos e subdiretórios (recursivamente) que eles contêm, du é o comando a ser usado.

    
por 27.10.2017 / 21:42
5
# /bin/ls -1sSr | tail -1

Lista ordenada com base no tamanho e, em seguida, mostra apenas a maior no final da lista.

    
por 27.10.2017 / 20:53
4

Como você mencionou o Linux, presumo que esteja usando a versão GNU Coreutils de ls .

De info ls , sabemos que ls -l será processado

"...file type, file mode bits, number of hard links, owner name, group name, size, and timestamp (*note Formatting file timestamps::), normally the modification time.

Então, olhando para a quinta coluna - esse é o tamanho do arquivo, e é claro que poderíamos analisar a saída de ls -l com awk ou qualquer outra ferramenta, mas 1) analisar ls é má idéia , e 2) tamanho dos arquivos que representam os dispositivos estarão ausentes no GNU ls .

Assim, eu recomendaria a alternativa:

$ find -maxdepth 1 -type f -exec du -b {}  \; | sort -k1,1 -n  | tail -n 1

Isso filtrará os arquivos, executará du para cada um deles e classificará a saída numericamente. A última linha é o maior arquivo.

    
por 27.10.2017 / 21:51
0

Você pode usar o comando du :

du -a $PWD | sort -n -r

A primeira saída é o diretório de trabalho

    
por 27.10.2017 / 20:57