Posso encontrar todos os arquivos com a extensão .log e ordenar por tamanho de arquivo?

3

Estou usando o CentOS 6.8

Gostaria de saber se posso encontrar todos os arquivos com a extensão .log e ordenar por tamanho de arquivo e exibir o tamanho do arquivo ao lado do nome do arquivo?

Atualmente, estou usando este comando para encontrar todos os arquivos com a extensão .log:

find .  -name \*.log
    
por bigmike7801 20.02.2017 / 20:48

3 respostas

3

Isso parece funcionar para mim:

find .  -name \*.log -ls | sort -r -n -k7
    
por 20.02.2017 / 21:08
2

Aqui estão duas opções; um bash-centric e um apenas por diversão.

( shopt -s globstar dotglob; stat --format "%s %n" -- **/*.log | sort -rn )

Isto:

  • é executado em um sub-shell, para que as instruções shopt não afetem o shell atual / em execução.
  • define as opções de shell globstar e dotglob ; globstar permite o uso da sintaxe ** para corresponder arquivos em subdiretórios; O dotglob permite que o shell globbing corresponda a diretórios que começam com .
  • stat é como reunimos os tamanhos dos arquivos com seus nomes; Ele é instalado por padrão nos sistemas CentOS - não é especificado por POSIX.
  • o trabalho real aqui é feito pelo globstar **/*.log , que reúne nomes de arquivos correspondentes (* .log) no diretório atual e em quaisquer subdiretórios.
  • em seguida, ordenamos de forma reversa numericamente os tamanhos dos arquivos & nomes para obter os maiores arquivos primeiro (use -n sem o r para classificá-los em ordem crescente).

Outra opção centrada no bash, mas que também exerce um sinalizador ls para classificar seus argumentos por tamanho:

shopt -s globstar dotglob
ls -lS **/*.log

# or, in reverse:

ls -lrS **/*.log

Para exercitar seu sistema e sua paciência, você pode procurar arquivos de um tamanho específico em uma determinada ordem:

for((i=9223372036854775807;i>=0;i--)); do find . -name \*.log -size ${i}c -exec stat --format "%s %n" {} + ; done

Isso executa 9.223.372.036.854.775.807 (mais de ) find de comandos, procurando por arquivos * .log de todos os tamanhos possíveis, novamente chamando stat para exibir apenas os tamanhos e nomes dos arquivos. Caso haja vários arquivos do mesmo tamanho, incluímos a sintaxe {} + do find para passar quantos nomes de arquivo para stat , como caberá no ambiente. Talvez seja necessário ajustar o intervalo de for do loop com base no tamanho inteiro do seu shell, ou se você sabe o tamanho do maior arquivo de log. Esta "opção" tem o "benefício" de poder ser compatível com POSIX se você substituir a chamada stat por um simples ls .

    
por 24.02.2017 / 01:50
-1

Experimente este comando:

 find .  -name \*.log |ls -lSh
    
por 20.02.2017 / 20:57