Tenha cuidado: du
não imprime o tamanho de um arquivo, ele fornece uma estimativa do uso do espaço no arquivo.
Você pode criar um arquivo de 10 MB, que usa muito menos:
dd if=/dev/zero of=file seek=10M count=1 bs=1
stat -c %s file
ls -lh file
du -h file
cat file | wc
Um exemplo é um arquivo compactado que usa menos espaço no disco que seu tamanho, como o exemplo acima de um arquivo esparso .
No exemplo acima, find . -type f -size +5M
produzirá file
mesmo se du
for muito menor que 5M.
Se você sabe que não tem novas linhas em seus nomes de arquivos, pode filtrar a saída de find
com:
find . -type f -size +5M | while IFS= read -r file; do
du=$(du -k "$file")
size="${du%%$(printf "\t")*}"
if test $size -gt $((5 * 1024)); then
echo "$file"
fi
done
Se você pode ter novas linhas em seus nomes de arquivos, você pode usar esta extensão GNU, mas depois usar algo diferente de echo
no loop:
find . -type f -size +5M -print0 | while IFS= read -r -d '' file; do
du=$(du -k "$file")
size="${du%%$(printf "\t")*}"
if test $size -gt $((5 * 1024)); then
echo "$file"
fi
done