Em vez de analisar a saída de ls (que é considerada uma prática muito ruim † ), você pode usar find e du da seguinte forma:
-
Para localizar todos os arquivos (
-type f) no diretório atual e subdiretórios de tamanho ≥1M (-size +1M), e obtenha a soma de seus tamanhos:find . -type f -size +1M -print0 | du -sch --files0-from=- | tail -1 -
Similar, mas não recurse em subdiretórios (
-maxdepth 1):find . -maxdepth 1 -type f -size +1M -print0 | du -sch --files0-from=- | tail -1 -
Para arquivos de tamanho ≤1M:
find . -type f -size -1M -print0 | du -sch --files0-from=- | tail -1 find . -maxdepth 1 -type f -size -1M -print0 | du -sch --files0-from=- | tail -1
Isso funciona desde que sua versão de du suporte a opção --files0-from .
Se não, você poderia tentar isto:
find . -type f -size +1M -exec du -sch {} + | tail -1
mas se você tiver muitos arquivos, não funcionará (você receberá uma resposta errada)! Nesse caso, você pode tentar isso:
find . -type f -size +1M -exec sh -c 'du -sch "$@" | tail -1' _ {} +
você terá várias linhas (esperamos que não sejam muitas) e terá que fazer as contas sozinho.
Com find , você tem um controle completo sobre quais arquivos deseja considerar! suas possibilidades de filtragem são praticamente infinitas.
Felicidades!
† Você receberá respostas erradas com ls -1h | grep 'M ' caso tenha arquivos que contenham a string "M " . E a saída de ls deve ser lida por humanos, não por máquinas ... as máquinas têm outros meios muito melhores para obter esse tipo de informação.