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.