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

9548
jdehaan

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

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

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

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

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

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

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

11 ответов на вопрос

5
monkey_p

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

du -a 

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

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

du -a > dump.txt 

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

Это для Linux: D

Просто использовал это для сравнения копий массивных каталогов рендеринга с большим количеством подкаталогов на моем Mac. FileMerge был полностью захлебнут, пока я не подал ему `du -a` дампов деревьев каталогов. Просто для запуска вывода через `sed`, чтобы изменить имена двух корневых каталогов на одну и ту же строку. rebusB 6 лет назад 0
2
T. Kaltnekar

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

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

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

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

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

+1 за ТС (хотя и не бесплатно :) 14 лет назад 0
2
Chris Nava

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

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

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

DIR /S >Listing1.txt 

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

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

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

One week ago take first snapshot:

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

Now take second snapshot:

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

And compare them:

rsync --archive --list-only /var/snapshot1/ /var/snapshot2/ 
Мне нравится этот ответ, потому что: 1. rsync сравнивает по имени файла, размеру и метке времени (так, как хочет OP) и 2. Он работает как в Windows, так и в Linux (и даже на дисках Windows, смонтированных cifs в Linux). agtoever 9 лет назад 0
0

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

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

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

Спасибо, но моя проблема не так тривиальна ... jdehaan 14 лет назад 0
0
harrymc

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

Карен Справочник Принтер

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

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

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

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

Ты пробовал смешать ? Я понятия не имею, хорошо ли это для огромных деревьев, но вы всегда можете попробовать это :)

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

Meld поможет вам просмотреть изменения кода и понять патчи. Это может даже помочь вам понять, что происходит в этом слиянии, которого вы продолжаете избегать.

Это очень хороший и хороший инструмент сравнения, но он не может сохранить состояние дерева каталогов (по крайней мере, не в той версии, которая у меня есть) для последующего использования и сравнения. jdehaan 14 лет назад 0
0
atrent

Вы пробовали Back In Time ?

Это инструмент GNU / Linux, который делает снимок файловой системы с помощью жестких ссылок или физических копий файлов и каталогов.

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