Есть ли способ заставить Thunar отображать «рекурсивный» размер файла?

Есть ли способ заставить Thunar отображать «рекурсивный» размер файла?

Я использую Thunar 1.6.3, и в настоящее время, когда я просматриваю несколько папок, это выглядит примерно так:

Folder 1        8,2 kB
Folder 2        4,1 kB
Folder 3        4,1 kB
Folder 4        0   kB

Я не уверен, откуда взялись эти цифры «размера», но я уверен, что они не отражают фактический размер всего содержимого папок, потому что, когда я щелкаю правой кнопкой мыши и выбираю «Свойства», общий размер папок (все они имеют размер всего в килобайтах) составляет более 100 ГБ.

Вопросы

  • Почему Thunar, как и командная строка в 12.04 и 14.04, показывает размер папки как 4K? Что означает это число?
  • Есть ли способ вместо этого отобразить составной размер, то есть рассчитанный рекурсивный размер папки и всего содержимого, в терминале, Thunar или любом другом файловом менеджере? (Примечание: я не ищу решение на основе скрипта оболочки).

решение1

Мне следует немного объяснить структуру файловой системы Linux, чтобы объяснить это. Большинство файловых систем Linux делают что-то похожее, но я предполагаю ext4, которая в настоящее время используется по умолчанию.

Структура файловой системы

  • inode — это базовый блок, который файловая система воспринимает как логическую единицу.
  • Индекс каталога содержит ссылки на другие индексы.
  • Файловый индексный дескриптор содержит метаданные, фактические данные и ссылки на блоки продолжения на случай, если файл придется хранить несмежным образом.

Ссылки

  • Ext4 поддерживает два типа ссылок: жесткие и мягкие.
  • Жесткая ссылка — это ссылка на inode напрямую. Каждый файл имеет по крайней мере одну жесткую ссылку из каталога, к которому он принадлежит.
  • Поскольку каталог — это просто inode с информацией о группе ссылок inode, он может ссылаться на себя или на родителя. Другими словами, папка может быть как дочерней, так и родительской по отношению к одной и той же папке.

Ладно, это может сбивать с толку. Позвольте мне объяснить. Предположим, у вас есть три папки, A, B, C, как показано ниже.

C is in B.  
B is in A.

Теперь, самое интересное, C может указывать на тот же inode, что и A, создавая то, что иногда называют циклической ссылкой. Если вы попробуете рекурсию, вы столкнетесь с бесконечным циклом.

  • Мягкие ссылки — это обычные файлы, которые записывают путь к каталогу в их целевом местоположении. Они просто помечены в файловой системе так, что вместо строки текста их следует интерпретировать как ссылку на какое-то другое место. Например, Nautilus создает мягкие ссылки, когда вы используете его опции «Создать ссылку»/«Ссылка здесь».

Ну и что?

Следовательно, попытка рекурсивного вычисления размеров имеет свои особенности. Плохая идея пытаться вычислять размеры рекурсивно по умолчанию. Однако диалоговые окна свойств всех приличных файловых менеджеров, которые я знаю, показывают рекурсивно вычисленные общие размеры, потому что это то, чего ожидает обычный пользователь.

У Windows нет проблем?

На самом деле, Windows использует другой формат файловой системы, называемый NTFS, который хранит список всех файлов и их размер. Поэтому он всегда может легко определить общий размер.

Тогда почему бы нам не использовать NTFS?

Он не поддерживает понятие прав доступа Unix ( rwxдля владельца, группы и вселенной отдельно), и эта единственная причина делает его непригодным для использования в качестве файловой системы Linux. Ext4 вносит многое в таблицу, так что это незначительное неудобство не имеет значения для многих.

Хорошо. Дай мне нужный размер.

Ты пробовал du?

Как это duработает?

duозначает использование диска. Фактически он считает блоки inode, заботясь о том, чтобы не пересчитать их дважды. Сложите размеры, и вы получите общий размер.

TL;DR

Используйте du -hs <foldername>для поиска фактического размера папки на диске. Читайте man duдля получения дополнительной информации.

решение2

ВтунарВ верхнем меню выберите «Правка»> «Настроить пользовательские действия», добавьте новое пользовательское действие с помощью:

  1. Базовыйвкладка: любое имя [например, папка(и)-размер файлов], команда du -h -c %N | grep total | zenity --text-infoили du -chs %N | zenity --text-infoдля выбранной папки и/или размера файла, за которым следует общий размер.
  2. Условия появлениявкладка: отметьте все флажки.

Я нашел это решение наhttp://crunchbang.org

решение3

Небольшой тривиальный момент в этой теме, специфичный для Thunar, заключается в том, что Thunar сообщает о разных размерах, чем du с опцией --apparent size или без нее. Я думаю, что предоставленный ответ для du является подсказкой, почему это может быть (возможно, Thunar на самом деле считает эти же вещи немного по-другому, что бы это ни было). Пример: Та же папка: (x — остаток, который я не записал) du без --apparent-size: 19.x ГБ du с --apparent-size:12.x ГБ Thunar 5.5x ГБ Значение Thunar в скобках: 5.9x ГБ Я бы, вероятно, в конечном итоге взял вывод du (учитывая его возраст), но тем не менее это интересно.

Связанный контент