Как подсчитать размер папки с учетом ссылок?

Обсуждение Total Commander. Установка, использование, настройка, решение проблем, скрытые функции. Обсуждение новых версий.

Модераторы: d-view, Моторокер, Avada, CaptainFlint, Nik

Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

GGS писал(а):Добавлю, что этот файл в папках Б и В может иметь совершенно разные имена. Так же как и в одной папке.
Если кол-во жёстких ссылок в одной папке зашкаливает за пару сотен, то, конечно, пользоваться отсевом из выделенных файлов, отсортированных по символьному пути, будет несколько долго, а уж есть операция неоднократная, то совсем не вариант. Тогда можно скрипт сделать: подсчёт размера всех файлов, не имеющих дубликатов + суммы файлов дубликатов, каждый из которых будет делиться на кол-во реальных ссылок на каждый.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Что ты вкладываешь в понятие "символьный путь"? И чем он помогает отсеивать жесткие копии? Жесткие копии можно отсеять исключительно по NTFS-индексу файла, который у них одинаков.

А делить размер на число жестких ссылок я хотел было предложить еще в первом своем посте этой темы, но такой способ будет давать неверный результат, если у файла есть жесткие копии вне рассматриваемого каталога - ведь такие доли размеров не будут учтены.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

MVV писал(а):Что ты вкладываешь в понятие "символьный путь"?
Путь нахождения самой ссылки, а не исходного файла.
MVV писал(а):И чем он помогает отсеивать жесткие копии?
Он не помогает отсеивать, по нему можно осуществить сортировку выделенных по реальному пути файлов, а после из отсортированных выделенных заспэйсить дубликаты.
MVV писал(а):Жесткие копии можно отсеять исключительно по NTFS-индексу файла, который у них одинаков.
Либо по индексу, всё равно.
MVV писал(а):но такой способ будет давать неверный результат, если у файла есть жесткие копии вне рассматриваемого каталога - ведь такие доли размеров не будут учтены.
Не понял, а зачем вдруг автору понадобится учитывать ссылки вне рассматриваемого каталога? :?
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Flasher писал(а):Путь нахождения самой ссылки, а не исходного файла.
Ты наверное плохо понимаешь, что такое жесткая ссылка. Жесткие копии файла - это равноправные указатели на физический файл в недрах файловой системы (любой файл - это пара, состоящая из содержимого файла и одной жесткой ссылки) - можно сказать, что в папках ты видишь не файлы, а жесткие ссылки на них. Имея две жесткие копии невозможно сказать, какая из них важнее, также как невозможно определить, какая из них была создана ранее. И единственный способ определить, что оба файла являются ссылками на один объект - сравнить идентификаторы. Путь у каждой жесткой ссылки на файл один, и это путь к ссылке.
Он не помогает отсеивать, по нему можно осуществить сортировку выделенных по реальному пути файлов, а после из отсортированных выделенных заспэйсить дубликаты.
Думаю, прочитав вышенаписанное в этом посте ты поймешь несостоятельность данной идеи. Отсеить мы ничего не можем, нам нужно просуммировать размеры всех файлов в папке, при этом не суммируя более одного раза файлы с одинаковыми индексами.
Flasher писал(а):Не понял, а зачем вдруг автору понадобится учитывать ссылки вне рассматриваемого каталога?
Представь, что файл имеет несколько ссылок внутри каталога, и несколько - вне его. А ты хочешь определить, сколько весит каталог, то есть для этого нужно каждый уникальный (по идентификатору) файл в нем подсчитать ровно 1 раз. Твоим способом ты не получишь полный вес файла, так как часть ссылок не будет учтена при суммировании. Арифметика тут несложная.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

MVV писал(а):любой файл - это пара, состоящая из содержимого файла и одной жесткой ссылки
Если бы она состояла из содержимого, то и размер бы на носителе увеличивался бы вдвое. Тогда и смысл в жётских ссылках бы пропадал.
MVV писал(а):также как невозможно определить, какая из них была создана ранее.
Если их более двух, то да, а если две то можно, узнав реальные и символьные пути каждого.
MVV писал(а):Путь у каждой жесткой ссылки на файл один, и это путь к ссылке.
Тогда что по твоему символьный путь и что реальный? Ты вообще список встраиваемых колонок в NLInfo видел?
MVV писал(а):Отсеить мы ничего не можем, нам нужно просуммировать размеры всех файлов в папке, при этом не суммируя более одного раза файлы с одинаковыми индексами.
Отсев предлагался пофайловый, т.е. снятие выделения с дубликатов.
MVV писал(а):Твоим способом ты не получишь полный вес файла, так как часть ссылок не будет учтена при суммировании.
Чего чего? Как это не будет? Закинул две ссылки на один файл размером 1 Мб в одну папку, и ещё одну ссылку на него в другую. Выделяю в первой папке два файла, сумма = 2 Мб, делю на 2, получается 1 Мб. Ну и какая у тебя тут другая может быть арифметика? :?
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Если бы она состояла из содержимого, то и размер бы на носителе увеличивался бы вдвое. Тогда и смысл в жётских ссылках бы пропадал.
С какой стати размер увеличивался бы? При создании жесткой ссылки создается такая же ссылка на то же содержимое файла. Получается, что у файла уже две точки доступа. Это как будто назначить логическому диску две буквы - диска от этого не станет два. :!:
Если их более двух, то да, а если две то можно, узнав реальные и символьные пути каждого.
Ты так и не объяснил, что понимаешь под символьными путями. Это какое-то абсурдное понятие, которое не имеет отношения к жестким ссылкам (hardlinks). И на все попытки объяснить тебе суть жестких ссылок ты продолжаешь гнуть свою кочергу.
Ты вообще список встраиваемых колонок в NLInfo видел?
Представь себе, видел. Моя NTLinks предоставляет больше колонок, если ты заметил, включая индекс файла - единственное поле, способное помочь при работе с жесткими ссылками.
Отсев предлагался пофайловый, т.е. снятие выделения с дубликатов.
Ручками пройти десяток тысяч файлов и поснимать выделение с дубликатов? :lol:
Чего чего? Как это не будет? Закинул две ссылки на один файл размером 1 Мб в одну папку, и ещё одну ссылку на него в другую. Выделяю в первой папке два файла, сумма = 2 Мб, делю на 2, получается 1 Мб. Ну и какая у тебя тут другая может быть арифметика?
Интересно, с какого это ты делишь на 2, когда у тебя счетчик жестких ссылок покажет минимум 3? :lol:
Кидаешь две ссылки на метровый файл в папку А, и две в папку Б - итого 4 жестких копии. А теперь считаешь размер папки А по твоей методике. Получаешь 1/4+1/4=0.5, а должен получить 1, так как файл весит метр! :D

Кстати, как ты создаешь свои жесткие ссылки? Я лично создаю их через NTFSLinks.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

MVV писал(а):При создании жесткой ссылки создается такая же ссылка на то же содержимое файла.
Вот именно что ссылка на содержимое, а не само содержимое, это абсолютно разные вещи.
MVV писал(а):Это как будто назначить логическому диску две буквы - диска от этого не станет два.
Ты МНЕ это рассказываешь?..
MVV писал(а):Ты так и не объяснил, что понимаешь под символьными путями.
Как это не объяснил? Может это ты не удосужился прочесть? :D
MVV писал(а):И на все попытки объяснить тебе суть жестких ссылок ты продолжаешь гнуть свою кочергу.
Я просто в твоих объяснениях ничего нового для себя не прочёл, кроме некоторых нестыковочных моментов.
MVV писал(а):Моя NTLinks предоставляет больше колонок, если ты заметил, включая индекс файла - единственное поле, способное помочь при работе с жесткими ссылками.
Больше чем что или у кого? :D Тогда остальные колонки там так, для красоты прикручены?
MVV писал(а):Ручками пройти десяток тысяч файлов и поснимать выделение с дубликатов?
Даа, с вниманием у тебя явно не лады. Вернись к посту, где я писал GGS, открыл Америку, называется. :lol:
MVV писал(а):Интересно, с какого это ты делишь на 2, когда у тебя счетчик жестких ссылок покажет 3?
С какой это стати, если путь вне надлежащей для подсчёта папке учитываться не будет? :? Счётчик NLInfo не обязательно трогать.
MVV писал(а):А по твоей методике. Получаешь 1*0.25+1*0.25=0.5
Это явно не моя методика. Ты меня с собой случем не спутал? :lol: Откуда вообще число в 1/4 взялось? То бишь сам файл + 3 ссылки? Смешить-то народ не надо.))) Моя методика заключается в другом: есть 500 жестких ссылок на один файл объёмом 1 Мб на харде, в проверяемой папке их 250, вот я эти 250 и выделяю. Сколько метров покажет ТС? Правильно - 250. На что делим? На кол-во файлов в надлежащей папке. Сколько файлов в этой папке? 250! Каков итог? 1 Мб. 8)
Если же исходного файла в этой папке не будет, то скрипт должен отсеять все файлы, реальные пути которых не ведут в родительских каталог.
MVV писал(а):Кстати, как ты создаешь свои жесткие ссылки? Я лично создаю их через NTFSLinks.
Ну какая разница, кто через него, кто через CreateHardLink.wcx.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Вот именно что ссылка на содержимое, а не само содержимое, это абсолютно разные вещи.
А покажи мне хотя бы одно место, где я эти понятия путал. Я лишь говорю, что каждый файл имеет минимум одну жесткую ссылку - и эта ссылка - сам файл, который ты видишь в папке. В таблице файлов (MFT) для каждого индекса хранится инфа о том, как получить доступ к содержимому (неважно, где-то на диске это содержимое или прямо в MFT). А далее в каталоге, где ты создаешь файл, создается запись, содержащая простейшие атрибуты файла и индекс в MFT, по которому искать содержимое файла. И каждая жесткая ссылка - это такая запись в каталоге. Сколько бы их ни было, где бы они не находились, друг о друге они не знают ничего кроме их общего числа - система удаляет содержимое файла, когда число жестких ссылок на него уменьшается до нуля.

Вот и подумай теперь, откуда арифметика. Если у меня 2 жестких ссылки на файл в одной папке и 2 в другой - внимание, вопрос на миллион, сколько всего ссылок? Правильно, 4. И NL_Info, как и NTLinks, тебе скажут, что ссылок 4. А если ты имеешь в виду не число жестких ссылок, возвращаемое плагинами, а число дубликатов индексов в пределах рассматриваемого каталога - так и скажи, тогда математика будет иная. Но тогда твой способ абсолютно ничем не отличается от моего, предложенного в самом начале темы (и более-менее подробно описанного, например, тут) - суммировать файлы, запоминая индексы уже просуммированных, чтобы в дальнейшем для каждого следующего файла проверять, был ли посчитан файл с таким индексом.
Или ты о каком-то чудо-счётчике, о котором тут никто представления не имеет?
Почему же, я все время говорю о поле, возвращаемом плагинами.

Как это не объяснил? Может это ты не удосужился прочесть?
То бишь сам файл + 3 ссылки?
Если же исходного файла в этой папке не будет, то скрипт должен отсеять все файлы, реальные пути которых не ведут в родительских каталог.
Если я должен был прочесть, что это Путь нахождения самой ссылки, а не исходного файла, то это не поможет тебе ничем. Для каждой жесткой ссылки символьный или реальный путь к ней - это и есть путь к ссылке, все ссылки равноправны, нельзя сказать, что исходный файл по ссылке aaa.bbb лежит под именем bbb.ccc. Можно лишь сказать, что файлы aaa.bbb и bbb.ccc являются жесткими копиями, что означает, что их записи в каталогах (которые по существу и являются жесткими ссылками) ссылаются на один элемент таблицы файлов. А символические ссылки на файл/папку, введенные в висте, а также точки соединения (junction) - это ссылки, которые ссылаются на объект каталога, а не на объект таблицы файлов, поэтому для них понятие реального пути имеет прямой смысл.
Тогда остальные колонки там так, для красоты прикручены?
Аж интересно стало, о каких конкретно колонках ты говоришь.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

MVV писал(а):А покажи мне хотя бы одно место, где я эти понятия путал.
Пожалуйста >
MVV писал(а):любой файл - это пара, состоящая из содержимого файла и одной жесткой ссылки
MVV писал(а):А если ты имеешь в виду не число жестких ссылок, возвращаемое плагинами, а число дубликатов индексов в пределах рассматриваемого каталога - так и скажи
А я разве не об этом пишу? :D
MVV писал(а):
Или ты о каком-то чудо-счётчике, о котором тут никто представления не имеет?
Почему же, я все время говорю о поле, возвращаемом плагинами.
Это ты кого цитируешь? :D
MVV писал(а):Если я должен был прочесть, что это Путь нахождения самой ссылки, а не исходного файла, то это не поможет тебе ничем.
А я разве искал помощи? :)
MVV писал(а):А символические ссылки на файл/папку, введенные в висте, а также точки соединения (junction) - это ссылки, которые ссылаются на объект каталога, а не на объект таблицы файлов, поэтому для них понятие реального пути имеет прямой смысл.
Вот теперь картина начинает вырисовываться. Символьные пути для символьных ссылок. Проще было сразу так написать.
MVV писал(а):Аж интересно стало, о каких конкретно колонках ты говоришь.
Целевой объект.Естественный/Символьный, Реальный путь.Естественный/Символьный, тип символьной ссылки, Корректная ссылка, ..
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Целевой объект.Естественный/Символьный, Реальный путь.Естественный/Символьный, тип символьной ссылки, Корректная ссылка, ..
Ну, я вижу, ты уже разобрался, что далеко не для каждого типа ссылки эти поля имеют смысл.
Пожалуйста >
Не вижу, где я в этом предложении спутал содержимое со ссылкой на содержимое, если я русским языком написал, что файл представляет собой само содержимое и жесткую ссылку на это содержимое.
А я разве не об этом пишу?
Ты думал об этом. И думал, что пишешь об этом. Но не писал явно об этом. А "кол-во реальных ссылок на каждый файл" - это в контексте темы о жестких ссылках в первую очередь число жестких ссылок файла, а не число жестких ссылок файла в пределах конкретной папки.
Вот теперь картина начинает вырисовываться. Символьные пути для символьных ссылок. Проще было сразу так написать.
Извините, RTFM. :D
Тебе не один раз пытались объяснить, что жесткие ссылки равноправны. А "символьный путь" в рамках NTLinks - это тот же реальный путь файла, но без замены идентификатора тома буквой, ассоциировать символьный путь с символическими ссылками не стоит.

А если по теме - упорядоченный массив элементарно строится с помощью массива данных и массива индексов, хотя тут возможно хватит и просто массива данных, так как элементы - всего лишь 64-битные числа. А нам нужен бинарный поиск элемента в массиве, иначе поиск индекса потребует катастрофически больше времени, если у нас будет несколько тысяч файлов. Самой нудной частью программы будет та, которая будет парсить список, переданный тоталом, и искать все файлы, удовлетворяющие строчкам списка.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

MVV писал(а):что файл представляет собой само содержимое и жесткую ссылку на это содержимое.
Вот это и противоречит моим словам о том, что содержимое он представлять не может, иначе бы размер увеличивался, а ты просто повторяешься и удивляешься своим же словам.
MVV писал(а):Ты думал об этом. И думал, что пишешь об этом. Но не писал явно об этом.
Это легко можно было понять из поста о несложной арифметике.
MVV писал(а):Извините, RTFM.
В справке по NTLinks дословно об этом не написано. Поэтому не извиню.
MVV писал(а):Тебе не один раз пытались объяснить, что жесткие ссылки равноправны.
Ты не из королевской знати случаем будешь, во множественном числе о себе говорить? :lol: Я без всяких объяснений прекрасно знал об этом. Так что зря время тратил.
MVV писал(а):А "символьный путь" в рамках NTLinks - это тот же реальный путь файла, но без замены идентификатора тома буквой, ассоциировать символьный путь с символическими ссылками не стоит.
И где я могу эту замену идентификатора тома буквой в реальном пути увидеть?
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Вот это и противоречит моим словам о том, что содержимое он представлять не может, иначе бы размер увеличивался, а ты просто повторяешься и удивляешься своим же словам.
То, что ты видишь в папке - это еще не файл, это лишь жесткая ссылка. А файл - это эта жесткая ссылка плюс то, на что она ссылается - на содержимое (плюс атрибуты, разрешения, дополнительные потоки и прочий бред). Но ничто не мешает файлу иметь несколько жестких ссылок.
В справке по NTLinks дословно об этом не написано. Поэтому не извиню.
А почему я обязан описывать то, чего полно в интернете, в справке к NTLinks? Справка по NTLinks описывает функции плагина, а не особенности жестких и символических ссылок.
Ты не из королевской знати случаем будешь, во множественном числе о себе говорить?
Если ты внимательно просмотришь тему, ты увидишь, что не я один вхожу в число тех, кто пытался открыть тебе глаза на сущность жестких ссылок. И твои остроты тут неуместны.
И где я могу эту замену идентификатора тома буквой в реальном пути увидеть?
Первые два символа реального пути - это буква, ассоциированная с томом, и двоеточие. :D
А вот если ты себе из папки с помощью команды mountvol (или просто из диспетчера дисков) сделаешь точку подключения (монтирования) тома, то для каждого файла в этой папке поле реального пути NTLinks будет возвращать читабельный путь, а поле символьного пути - путь, начинающийся с идентификатора тома (например, \\?\Volume{cd6ccf88-d915-11db-ae94-008048198c56}\).
Я без всяких объяснений прекрасно знал об этом. Так что зря время тратил.
Хоть бы раз спасибо сказал вместо надменного посыла.
Что же ты, если прекрасно все знал, путал типы ссылок и привязывал жесткие ссылки к реальным/символическим путям? Можешь не отвечать, вопрос риторический. Я не собираюсь больше тут флейм разводить.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

MVV писал(а):То, что ты видишь в папке - это еще не файл, это лишь жесткая ссылка. А файл - это эта жесткая ссылка плюс то, на что она ссылается - на содержимое (плюс атрибуты, разрешения, дополнительные потоки и прочий бред). Но ничто не мешает файлу иметь несколько жестких ссылок.
Как это вообще относится к цитированным словам? Всё что ты написал итак вполне очевидно тем, кто с ж.с. имел дело.
MVV писал(а):А почему я обязан описывать то, чего полно в интернете
Поэтому правильно выбирай выражения, не RTFM, а тогда уж STFW, RTFW, UTFG. :D И потом мы обсуждаем колонки плагина и что каждая отражает, поэтому ни к месту эти слова.
MVV писал(а):Если ты внимательно просмотришь тему, ты увидишь, что не я один вхожу в число тех, кто пытался открыть тебе глаза на сущность жестких ссылок. И твои остроты тут неуместны.
Кроме тебя мне с пеной у рта тут ничего никто не доказывал, и я говорил конкретно о равноправии ссылок и ни о чём больше. Поэтому говорить от лица всех несколько невежливо, согласись.
MVV писал(а):Хоть бы раз спасибо сказал вместо надменного посыла.
Ну, во-первых, это никакой не посыл, и время ты тратил зря далеко не на всё, как нужно понимать, исходя их контекста приведённой цитаты, а именно касаемо равноправия жестких ссылок. Во-вторых, спасибо я говорю в случае, когда информация лично для меня несёт существенную пользу, говорить спасибо за лекции с нравоучительным подтекстом несколько не в моих интересах.
MVV писал(а):Что же ты, если прекрасно все знал, путал типы ссылок и привязывал жесткие ссылки к реальным/символическим путям? Можешь не отвечать, вопрос риторический.
Опять ты передёргиваешь, всё я точно не знал, и ты внёс определённую ясность, не без воды, к сожалению. Типы ссылок я не путал, это уже твои домыслы.
MVV писал(а):Я не собираюсь больше тут флейм разводить.
Ну наконец-то, а то я уж и надеяться подперестал на это. Я бы и не начинал весь этот хоровод, зная во что он превратится..
Ответить