Будьте осторожны: du не печатает размер файла, он дает вам оценку использования файлового пространства.
Вы можете создать файл размером 10 МБ, который использует гораздо меньше:
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
Примером является сжатый файл, который использует меньше места на диске, чем его размер, как пример выше разреженного файла.
В приведенном выше примере find . -type f -size +5M будет выводиться file, даже если du намного меньше 5M.
Если вы знаете, что у вас нет новых строк в ваших именах файлов, вы можете отфильтровать вывод find с помощью:
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
] Если вы можете иметь новые строки в своих именах файлов, вы можете использовать это расширение GNU, но затем использовать в цикле что-то еще, чем echo:
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