Estou tentando encontrar todos os arquivos grandes no meu servidor Centos. Para fazer isso, estou usando:
find / -maxdepth 10 -size +100000 -ls
Tentei mudar -ls
para -lsh
mas não é permitido.
Como posso exibir esses resultados com tamanhos legíveis por humanos (usando os sufixos k, M,…)?
file
utilitáriofind
.Respostas:
find
não tem opções sofisticadas comols
. Se você quiserls -h
, precisa ligarls
.Eu recomendo a
-xdev
opção de evitar a recursão em outros sistemas de arquivos, o que seria inútil se você estiver preocupado com o espaço em disco.Se você usar o zsh como seu shell, em vez de usá-
find
lo, 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, pode**/
recursar em subdiretórios. Se você se preocupa com a profundidade máxima, é mais complicado, pois 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 od
qualificador glob; você precisa encontrar o número do dispositivo, que pode ser exibido com ostat
comando no Linux (stat -c %d /
para exibir apenas o número) ou com o próprio zshstat
embutido (executezmodload zsh/stat
para carregá-lo).fonte
O comando que você está tentando é legível para mim. No entanto, você pode fazer uso do utilitário de arquivo com a localização abaixo.
Outra maneira de fazer isso é usar o comando abaixo.
O comando acima fornecerá os arquivos no tamanho classificado.
Se você estiver usando coreutils> 7.5 , poderá emitir o comando abaixo para listar os arquivos por tamanhos.
Na minha máquina, eu não tinha a
sort -h
opção disponível.Como você mencionou no comentário, seu formato legível para humanos é que o arquivo deve ter o tamanho em kb , mb ou gb . Eu iria com o segundo comando que eu tinha postado como resposta. A saída que obtive quando a usei no meu sistema é,
fonte
> output
ao comando Depois, você pode abrir o arquivo e ver a saída como você deseja :)du -a --max-depth=10 / | sort -rn
é o fim que eu poderia chegar. No entanto, nesse caso, ele não exibirá o tamanho em KB, MB ou GB.Eu acho que o que você está procurando é mais como o seguinte.
O
-exec
permite executar um comando e o{}
é substituído pelo resultado da localização. Por fim, o+
é dizer é encontrar o final do comando e é necessário.fonte
{}
aqui. As aspas simples no comando são para o shell, mas o shell nunca verá ols -lah <args...>
comando - ele vê{}
, o que não precisa ser citado. Éfind
que vê ols -lah {}
e éfind
que expande o{}
, e, como está implícito no nome da-exec
opção,find
usa umaexec*
chamada de sistema diretamente nos argumentos, para que não haja problemas com espaços porquefind
não fará divisão de palavras nos seus nomes de arquivos.-a
opção parals
é desnecessária, pois os argumentos devem ser arquivos e não diretórios. O GNU encontra usosls -dils
para a-ls
opção, de modo a replicar o mais próximo possívells -dilsh
.find . -type f -exec file '{}' \;
Executa o arquivo em todos os arquivos no diretório atual ou abaixo dele. Observe que os colchetes estão entre aspas simples para protegê-los da interpretação como pontuação do script do shell. O ponto-e-vírgula é igualmente protegido pelo uso de uma barra invertida, embora aspas simples também possam ter sido usadas nesse caso.{}
ser citado.