Как `du` только пространство, израсходованное файлами, которые не привязаны в другом месте?

Используя rsync --link-dest для компактных снимков , как я могу определить, сколько места я фактически сохранил? Или более общий:

Как определить, сколько места используется в каталоге, рассматривая только файлы, которые не имеют жесткой привязки в другом месте за пределами структуры каталогов? Напрашивается по-другому: сколько свободного места будет освобождено после удаления этого каталога? ( du -hs будет лежать. Возможно, потребуется место, необходимое для самих жестких ссылок)

3 Solutions collect form web for “Как `du` только пространство, израсходованное файлами, которые не привязаны в другом месте?”

Предполагая, что нет внутренних жестких ссылок (т. Е. Каждый файл с более чем одной жесткой линией связан из-за дерева), вы можете:

 find . -links -2 -print0 | du -c --files0-from=- 

EDIT И вот что я набросал в комментарии, применен. Только без du ; kudos @StephaneChazelas для заметок du не требуется. Объяснение в конце.

 ( find . -type d -printf '%k + ' ; \ find . \! -type d -printf '%n\t%i\t%k\n' | \ sort | uniq -c | \ awk '$1 >= $2 { print $4 " +\\" }' ; \ echo 0 ) | bc 

Мы делаем это, чтобы создать строку с использованием диска (в КБ) каждого соответствующего файла, разделенного знаками плюс. Затем мы кормим это большое дополнение к bc .

Первый вызов find делает это для каталогов.

Второй find печатает количество ссылок, индекс и использование диска. Мы передаем этот список через sort | uniq -c sort | uniq -c чтобы получить список (количество появлений в дереве, количество ссылок, индекс, использование диска).

Мы передаем этот список через awk , и если первое поле (# появления) больше или равно второй (# жестких ссылок), то есть нет ссылок на этот файл вне дерева, а затем напечатайте четвертое поле (использование диска) со знаком плюс и обратная косая черта.

Наконец, мы выводим 0 , поэтому формула является синтаксически правильной (она вписывается в + противном случае) и передает ее на bc . Уф.

(Но я бы использовал более простой первый метод, если он дает достаточно хороший ответ.)

В принципе, вам нужно получить номера inode и количество ссылок для всех файлов (не-каталогов), сравнить это количество ссылок с количеством вхождений каждого индексного дескриптора, а если они отличаются, исключите файл.

Предполагая, что они все в одной файловой системе, что-то вроде этого должно работать (с GNU find):

 find . -type d -printf '%k\n' -o -printf '%i %n %k\n' | awk ' NF==1{t+=$0; next} {n1[$1]=$2; n2[$1]++; s[$1]=$3} END { for (i in n1) if (n1[i] == n2[i]) t+=s[i] print t }' 

du actualy не будет лгать;) Он анализирует режиссер (ы), который он дает, считая только первые жесткие ссылки, указывающие на тот же inode, с которым он сталкивается.

Если вы спросите, что он видит только в одном каталоге, все равно, что есть другие жесткие ссылки, указывающие на одно и то же содержимое:

 $ du -h daily.0 && du -hc daily.1 29G /daily.0 29G /daily.1 

Теперь дайте ему dirs в той же строке (начиная с самой последней для инкрементных резервных копий rsync с --link-dest ):

 $ du -hc daily.0 daily.1 29G /daily.0 364M /daily.1 29G total 

Или весь резервный каталог:

 $ du -hc --max-depth=1 /snapshots 29G /daily.0 364M /daily.1 537M /daily.2 333M /daily.3 30G total 

Любой файл в 'daily.1', ссылающийся на inode (иначе называемый «реальный» файл), уже упоминаемый в «daily.0», не будет считаться.

Поэтому удаление ежедневно.1 будет сохранять 364 МБ на вашем устройстве.

УДАЛИТЬ

  • Почему du сообщает размер 0 для некоторых непустых файлов на разделе HFS +?
  • Установка Siemens NX 10: не удалось определить файловую систему, содержащую / usr / ugs100
  • Использование диска в конкретной файловой системе
  • Нет свободного места на устройстве / Нет Inodes бесплатно ИЛИ используется / Двойной монтаж
  • Почему мой tar-файл больше, чем резервная копия каталога
  • Unix-эквивалент `du -sb` для получения суммарного размера в байтах
  • как использовать / log fS на двух удаленных серверах
  • Как изменить порядок рекурсии
  • Как я могу контролировать дисковый ввод-вывод в определенном каталоге?
  • Скажите fs на свободное место из удаленных файлов СЕЙЧАС
  • Обмен огромными файловыми деревьями между дисками
  • Interesting Posts

    Выполнение команды на сервере, но наличие локальных файлов для чтения / записи на сервере

    Вопрос VirtualBox на Fedora 24

    tgz-файл дает недопустимые сжатые данные – формат нарушен

    Каков самый элегантный способ ограничения / tmp?

    Постоянное именование NIC во FreeBSD

    Почему статус sendmail продолжает изменяться на «мертвые, но сусики заблокированы»?

    Что такое поле Archive в файле Release, для которого используется?

    Невозможно просмотреть ловушки через snmptrad?

    Как установить Ubuntu в нетбук, но сохраняя первоначальную установку win7 в хранилище

    Ddrescue: могут ли данные отличаться, если я ошибочно смонтировал диск на окнах?

    Невозможно отключить многоадресную рассылку в Linux

    Выбор строк в файле CSV на основе значения столбца, содержащего встроенную запятую

    Возможно ли в taskwarrior для напоминаний о повторяющихся задачах истечь автоматически?

    Какая конфигурация определяет рабочую среду?

    Bash globs как аргументы без файла. Пример: apt-get remove pkg- *

    Linux и Unix - лучшая ОС в мире.