Вопрос: Как лучше сравнивать огромные деревья каталогов


Как сравнить деревья каталогов огромного размера?

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

Treecomp было бы здорово для этого, но с огромным деревом (я имею в виду действительно огромный!) он падает, потому что он пытается сохранить его в памяти (недостаточно 4 ГБ памяти) ...

Я работал над проблемой, разбивая снимки на части и сравнивая эти части. Но это утомительно, и проблема, безусловно, может быть решена лучше.

Есть ли еще один бесплатный (лучший и открытый исходный код) инструмент, который я могу попробовать? Или есть другой способ сделать это, что я не замечаю?

ОС может быть Linux или Windows.


4
2017-09-30 09:11


Источник


У кого-то есть хорошая эквивалент командной строки для Linux? Я свернул свой собственный с помощью find и sha1sum, но я думаю, что это гарантирует первоклассную программу. - Peter Lyons
Помимо сравнения 3? Сколько файлов и папок мы говорим? Насколько велика эта поездка? - Richie086
То, что я делал в прошлом, создает файл дампа каталога, а затем сравнивает файлы с ad-hoc-программой. - Daniel R Hicks


Ответы:


Я попытаюсь немного расширить, как это сделать Total Commander (Надеюсь, я понял, что вы хотите сделать).

  • устанавливать DiskDir плагин-упаковщик (я установил прямую ссылку на плагин, если вы предпочитаете, что можете перейти к плагины странице и найдите плагин DiskDir
  • после того, как плагин установит «пакет» в каталог, который вы хотите отслеживать с помощью Alt + F5, и выберите «lst» из выпадающего списка в части Packer диалогового окна; это создаст «пакет», который вы можете ввести, нажав enter, например, вы должны ввести каталог, и он отобразит полное содержимое каталога
  • при сравнении результатов перейдите в исходный каталог на левой панели и введите нужный снимок на правой панели
  • используйте функцию «Синхронизировать Dirs», расположенную в меню «Команды»
  • в окне «Синхронизировать каталоги» снимите флажок «сравнивать содержимое», отметьте «Поддиры» и «Игнорировать дату» (или нет, если важна дата изменения) и выполните сравнение
  • окно покажет вам файлы, которые являются равными (в данном случае не по содержанию, только по размеру), файлы, которые отличаются, и файлы, отсутствующие слева / справа

Поскольку моментальный снимок представляет собой простой текстовый файл, и вы не сравниваете его по содержимому, он должен быть быстрым, но я никогда не использовал его для действительно огромного каталога.

Это полезно, если вы не делаете резервные копии, но хотите сделать снимок того, что содержимое каталога было в какой-то момент. Если вы делаете резервные копии, вы можете использовать один и тот же инструмент (Synchronize dirs) для сравнения по содержимому.

Существует также Расширенная версия плагина DiskDir, ссылка для загрузки находится в первом сообщении. Эта версия позволяет вам создавать пакеты (например, zip, 7z ...) в качестве каталогов в моментальном снимке. Это, конечно, увеличит время создания моментального снимка.


2
2017-09-30 12:30



+1 для TC (хотя и не бесплатно :)


вы можете просто использовать в терминале

du -a

Это вернет все файлы во всю подпапку, включая размеры, то просто сравните файлы

Чтобы сохранить данные в текстовом файле

du -a > dump.txt

Тогда вы можете просто использовать что-то вроде разница сравнить файлы

Это для linux: D


5
2017-09-30 10:53



Просто использовал это, чтобы сравнить копии массивных каталогов рендеринга с большим количеством подкаталогов на моем mac. FileMerge полностью задохнулся, пока я его не накормил du -a дампы деревьев каталогов. Просто для запуска вывода через sed для изменения двух имен корневых каталогов в одну строку. - rebusB


Я использовал хеши MD5 и diff, чтобы сравнивать деревья в прошлом. Это медленный но найдет измененные файлы в случаях, когда даты ненадежны. Он также переносится, поэтому вы можете перенести индекс вместо сравнения файлов через сеть.

find /path/to/check -type f | xargs md5sum > after.txt

diff before.txt after.txt > diffs.txt

2
2017-09-30 15:14



Хороший ответ, но я бы избегал md5 в файловой системе обсуждаемого здесь размера. - DaveParillo
Для тех, кто пытается что-то сделать на Windows Machine (2008 / Vista и выше), вы можете использовать следующую команду: forfiles / PC: \ Your \ Path \ Here / s / C "cmd / c rash --simple @file" > C: \ OutputOfHashes.txt forfiles - это встроенная команда с 2008 / Vista. technet.microsoft.com/en-us/library/cc753551%28v=ws.10%29.aspx   Просто замените команду извлечения харшей (с открытым исходным кодом хэш-генерации) с помощью хэшира по вашему выбору. rhash.anz.ru - aolszowka
Возможно, инструмент, который может кэшировать хэши, будет решением. Что-то вроде GIT будет пересчитывать только хэши измененных файлов. Интересно, можете ли вы использовать его хэш-магазин в качестве источника сравнения ... (Git использует SHA1 против MD5, поэтому начальное вычисление будет выше, но уровень поддержки будет ниже из-за особенностей кеширования.) - Chris Nava


Вы можете просто использовать командную строку для сброса списка:

DIR /S >Listing1.txt

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

Чтобы сравнить два списка, используйте любой инструмент сравнения файлов, например WinDiff или CompareIt и т. Д. В WikiPedia есть список таких инструментов здесь: http://en.wikipedia.org/wiki/Comparison_of_file_comparison_tools


1
2017-09-30 09:53



<sarcasm> Отличный трюк </ sarcasm>, если вы скажете мне, как сравнить полученные 2x 10GB файлы в инструменте сравнения файлов! Инструмент, который хранит информацию в базе данных, может помочь мне, но это не извиняет. - jdehaan
Извините, это звучит, может быть, немного грубо, после того, как я перечитаю себя. Это не было так. Возможно, это может помочь другим людям с меньшим объемом данных без установки какого-либо дополнительного программного обеспечения в системе. - jdehaan
Нет проблем. Я не понимал, что ваши списки огромны, и вы правы, что в этом случае мое предложение не подходит. Я думал, что это упоминание об этом методе, поскольку иногда люди слишком увлекаются поиском лучшего инструмента, забывая о простых способах делать вещи. Но, как вы сказали, в вашем случае это не решение, и вам понадобится другой инструмент. - ssollinger


Неделю назад сделайте первый снимок:

rsync --archive /the/source/ /var/snapshot1/

Теперь сделайте второй снимок:

rsync --archive /the/source/ /var/snapshot2/

И сравните их:

rsync --archive --list-only /var/snapshot1/ /var/snapshot2/

1
2018-01-22 22:26



Мне нравится этот ответ, потому что: 1. rsync сравнивает имя файла, размер и временную метку (точно так же, как хочет OP) и 2. Он работает как на Windows, так и на Linux (и даже на Windows-приводы cifs-mount на Linux). - agtoever


Я сделал это в Total Commander, используя функцию синхронизации. 1.2TB данных на двух дисках.


0
2017-09-30 09:29



Звучит неплохо, но как сравнить состояние данных с тем, которое было там месяц назад. Мне не нужно решение для резервного копирования, я просто хочу определить изменения с одного контрольного пункта на другой. Меня не интересуют изменения внутри файлов, просто изменения в структуре, файлы, добавленные / удаленные / измененные, созданные или удаленные / измененные каталоги. Содержание не имеет значения для меня. - jdehaan
Функция синхронизации Total Commander показывает вам список новых или измененных файлов с обеих сторон, без необходимости запуска синхронизации.
Это нормально, но у меня есть только данные один раз (сегодня). Для другой стороны (месяцем ранее) мне также понадобятся данные, и у меня недостаточно памяти для нескольких десятков ТБ ... Treecomp имеет эту функцию, но не очень хорошо масштабируется с большими деревьями, до 2 ТБ. , - jdehaan
Я должен уточнить, что ограничение - это не количество данных, а количество файлов / каталогов, поскольку данные не включены в моментальный снимок treecomp. - jdehaan


FreeCommander имеет возможность сравнивать две разные папки.


0
2017-09-30 09:32



Спасибо, но моя проблема не такая тривиальная ... - jdehaan


Вы также можете попробовать:

Принтер Карен 

Картонный принтер Карен может печатать   имя каждого файла на диске,   наряду с размером файла, датой и   время последней модификации и   атрибуты (только для чтения, скрытые, системы   и архив)! И теперь, список   файлы можно сортировать по имени, размеру,   дата создана, дата последнего изменения или   дата последнего доступа.

Генератор списка файлов

FLG - это бесплатный генератор списков файлов. Это   ищет дерево каталогов для   файлы с запрошенными критериями и   создает список в формате HTML.


0
2017-09-30 09:32



Карен-справочник Карен - действительно хороший инструмент. Возможно, синтаксический анализ выходных файлов с помощью Perl-скрипта может помочь мне в их сравнении, но он должен быть умным, чтобы не использовать слишком много памяти ... Я не могу поверить, что я единственный, у кого есть эта проблема ... - jdehaan
Ты, конечно, не единственный. Является ли ваша проблема скорее синхронизацией каталогов? Если это так, я могу порекомендовать очень быстрый SyncBack Freeware на 2brightsparks.com/assets/software/InfoHesiveViewerEP_Setup.exe, - harrymc