dpkg --get-selections | cut -f1 | while read pkg; do dpkg -L $pkg | xargs -I'{}' bash -c 'if [ ! -d "{}" ]; then echo "{}"; fi' | tr '\n' '\000' | du -c --files0-from - | tail -1 | sed "s/total/$pkg/"; done
Команда dpkg —get-selections возвращает список всех установленных пакетов в системе. Команда cut -f1 используется для извлечения только имен пакетов из выходных данных предыдущей команды. Команда while read pkg выполняет итерацию для каждого пакета, передавая его в переменную pkg.
Внутри цикла, команда dpkg -l $pkg используется для получения информации о каждом пакете, а xargs -i'{}’ bash -c используется для выполнения последующей команды только если пакет не является директорией. В этом случае команда echo «{}» печатает имя пакета.
Команда tr ‘\n’ ‘\000’ используется для замены символа новой строки на символ NULL, обеспечивая корректное чтение путей файлов в случае, если они содержат пробелы. Команда du -c —files0-from — используется для вычисления размеров файлов, принимая список файлов через стандартный ввод.
Затем команда tail -1 выполняет выборку последней строки, содержащей общий размер всех файлов, а sed «s/total/$pkg/» заменяет слово «total» на имя пакета в выводе.
В результате, команда выводит список самых больших установленных пакетов, их размеры исключая директории, их можно рассматривать как альтернативу другим инструментам для анализа размеров установленных пакетов.