Тут є багато відповідей, багато з яких - це дублікати. Я бачу три тенденції: проходження другого дзвінка, використання складного коду shell / awk та використання інших мов.
Ось сумісне з POSIX рішення з використанням du та awk, яке повинно працювати в кожній системі.
Я застосував дещо інший підхід, додавши, -x
щоб переконатися, що ми залишаємось в одній файловій системі (мені потрібна ця операція лише тоді, коли мені бракує місця на диску, тож навіщо відсівати речі, які я встановив у цьому дереві FS або перемістив і символічно пов'язані назад?) та відображення постійних одиниць для полегшення візуального розбору. У цьому випадку я зазвичай вибираю не сортувати, щоб я міг краще бачити ієрархічну структуру.
sudo du -x | awk '
$1 > 2^20 { s=$1; $1=""; printf "%7sG%s\n", sprintf("%.2f",s/2^21), $0 }'
(Оскільки це відповідає послідовним одиницям, ви можете додати, | sort -n
якщо ви дійсно хочете сортувати результати редагування.)
Це фільтрує будь-який каталог, вміст якого (сукупний) не перевищує 512 Мб, а потім відображає розміри в гігабайт. За замовчуванням, третій використовує розмір блоку 512 байт (так стан AWK від 2 20 блоків 512 і його- 21 дільник перетворює одиниці в ГБ - ми могли б використовувати du -kx
з $1 > 512*1024
і s/1024^2
більш читабельним людиною). Всередині умови awk ми встановлюємо s
розмір, щоб ми могли його видалити з рядка ( $0
). При цьому зберігається роздільник (який згортається на єдиний пробіл), тому фінал %s
представляє пробіл, а потім назву зведеного каталогу. %7s
вирівнює закруглений %.2f
розмір ГБ (збільшити до, %8s
якщо у вас> 10 ТБ).
На відміну від більшості рішень тут, це належним чином підтримує каталоги з пробілами в їх іменах (хоча кожне рішення, включаючи це, буде неправильним іменем каталогів, що містять розриви рядків).