Como exibir os tamanhos de arquivos “legíveis por humanos” nos resultados de busca?

8

Estou tentando encontrar todos os arquivos grandes no meu servidor Centos. Para fazer isso, estou usando:

find / -maxdepth 10 -size +100000 -ls

Eu tentei alterar -ls para -lsh , mas isso não é permitido.

Como posso exibir esses resultados com tamanhos legíveis (usando os sufixos k, M,…)?

    
por blarg 11.04.2014 / 17:23

3 respostas

8

find não possui opções sofisticadas como ls . Se você quiser ls -h , você precisa chamar ls .

find / -maxdepth 10 -size +100000 -exec ls -lh {} +

Eu recomendo a opção -xdev para evitar recursão em outros sistemas de arquivos, o que seria inútil se você estiver preocupado com o espaço em disco.

find / -xdev -maxdepth 10 -size +100000 -exec ls -lh {} +

Se você usar zsh como seu shell, em vez de usar find , poderá usar qualificadores glob. Limitar o tamanho do arquivo é simples: L seguido por um tamanho; o tamanho pode ter uma unidade opcional antes do número. Se você não se importa com a profundidade máxima, você pode usar **/ para recorrer a subdiretórios. Se você se preocupa com a profundidade máxima, é mais complicado, já que os padrões zsh glob não têm como expressar “no máximo n ocorrências”. Para evitar a recursão entre dispositivos, use o qualificador d glob; você precisa encontrar o número do dispositivo, que pode ser exibido com o comando stat no Linux ( stat -c %d / para exibir apenas o número) ou com o próprio stat do zsh (executar zmodload zsh/stat para carregá-lo).

ls -lh /**/*(L+M99d$(stat -c %d /))
    
por 13.04.2014 / 02:41
3

O comando que você está tentando é legível para mim. No entanto, você pode fazer uso do utilitário de arquivo com o find como abaixo.

find / -maxdepth 10 -size +100000 -exec sh -c 'file -b {} | grep text &>/dev/null' \; -print

Outra maneira de fazer isso é usando o comando abaixo.

du -BM / | sort -nr

O comando acima fornecerá os arquivos no tamanho do arquivo classificado.

Se você estiver usando coreutils > 7.5 , você pode emitir o comando abaixo para listar os arquivos por tamanhos.

du -ah / | grep -v "/$" | sort -h

Na minha máquina, não tive a opção sort -h disponível.

Como você mencionou no comentário, o formato legível por humanos é que o arquivo deve ter o tamanho em kb , mb ou gb . Eu iria com o segundo comando que eu tinha postado como a resposta. A saída que recebi quando usei no meu sistema é

du -BM /home/ramesh/chk1/ | sort -nr

50M     /home/ramesh/chk1/
21M     /home/ramesh/chk1/Hierarchical_Clustering_Working
3M      /home/ramesh/chk1/checking_files
1M      /home/ramesh/chk1/checking/checking2
1M      /home/ramesh/chk1/checking/checking1
1M      /home/ramesh/chk1/checking/asdf
1M      /home/ramesh/chk1/checking
    
por 11.04.2014 / 17:34
1

Acho que o que você está procurando é mais parecido com o seguinte.

find / -maxdepth 10 -size +100000 -exec ls -lah {} + 

O -exec permite que você execute um comando e o {} é substituído pelo resultado da descoberta. Por fim, o + é para informar que é o final do comando e é obrigatório.

    
por 11.04.2014 / 18:59

Tags