Windows сравнить содержимое папок рекурсивно

Обновлено: 05.07.2024

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

например, скажем, у меня есть

и предположим, что b.txt было изменено в C:source , и, таким образом, более новые.

затем дается магический скрипт или команда, скажем, magic C:source C:target , Я хотел был бы выход к будь

или полный путь к исходной или целевой папке также будет приемлем:

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

что я уже знаю.

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

тем не менее, я не хотел бы полагаться на Cygwin (cwRsync) для использования rsync, так как я уже склонен к запуску быстрых и грязных экспериментов на моей установке Cygwin, часто нарушая окружающую среду и необходимости переустановки Cygwin каждые несколько недель. Такого рода выступает против "надежной" части ночного резервного копирования.

Я не нашел никакого "канонического" инструмента, такого как rsync в Windows, по крайней мере, не поддерживающего такие опции, как выше. Также,я не ищу программное обеспечение в общем, если это не простой и компактный инструмент специально для этой цели -я предпочитаю прозрачное, программируемое решение. Для чего-то столь же важного, как резервное копирование файлов, полагаться на программное обеспечение или код, который я не вижу или не понимаю, страшно!

резюме

Я не могу обернуть голову вокруг синтаксиса пакетных сценариев. Далее я попробую PowerShell. Но что бы вы да, дали это задание?- Есть ли какой-то очевидный маршрут, что я не хватает?

У меня есть две разные папки с xml-файлами. Одна папка (folder2) содержит обновленные и новые xml-файлы по сравнению с другой (folder1). Мне нужно знать, какие файлы в folder2 новые / обновлены по сравнению с folder1 и скопировать их в третью папку (folder3). Каков наилучший способ сделать это в PowerShell?

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

во-первых, есть два способа сделать сравнение содержимого. Ленивый / в основном правильный способ, который сравнивает длину файлов; и точный, но более сложный способ, который сравнивает хэш содержимого каждого файла.

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

в основном, вы хотите два объекта, которые представляем исходную и целевую папки:

затем вы можете использовать Compare-Object чтобы увидеть, какие элементы отличаются.

Compare-Object $Folder1 $Folder2 -Property Name, Length

который будет перечислять для вас все, что отличается, сравнивая только имя и длину файловых объектов в каждой коллекции.

вы можете передать это в Where-Object фильтр, чтобы выбрать материал, который отличается с левой стороны.

Compare-Object $Folder1 $Folder2 -Property Name, Length | Where-Object | ForEach-Object

рекурсивный каталог Diff с использованием MD5 хеширования (сравнивает содержимое)

вот чистый PowerShell v3 + рекурсивный файл diff (без зависимостей), который вычисляет хэш MD5 для каждого содержимого файла каталогов (слева/справа). Можно дополнительно экспортировать CSV вместе с текстовым файлом сводки. По умолчанию выводит результат в stdout. Может либо отбросить rdiff.ps1 файл в ваш путь или скопировать содержимое в сценарий.

USAGE: rdiff path/to/left,path/to/right [-s path/to/summary/dir]

здесь суть. Рекомендуется использовать версию из gist, поскольку она может иметь дополнительные функции с течением времени. Не стесняйтесь, присылайте запросы.

далее к ответу @JNK, вы можете убедиться, что вы всегда работаете с файлами, а не с менее интуитивным выходом из Compare-Object . Вам просто нужно использовать -PassThru переключатель.

это, по крайней мере, означает, что вам не нужно беспокоиться о том, в какую сторону указывает стрелка SideIndicator!

кроме того, имейте в виду, что вы можете сравнить на LastWriteTime как хорошо.

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

вы можете сделать это, добавив новый ScriptProperty в списки Folder1 и Folder2:

затем вы должны быть в состоянии использовать RelativePath как свойство при сравнении двух объектов, а также использовать это, чтобы присоединиться к "C:\Folder3" при копировании, чтобы сохранить структуру папок в место.

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

Интерфейс Beyond Compare удобен за счет многовкладочного интерфейса: это позволяет работать с несколькими сессиями параллельно и в одном окне. Помимо того, можно создавать рабочие пространства (workspaces) — коллекции открытых сессий.

Важные отличия этого продукта от большинства аналогов — наглядность сравнения и удобство редактирования во всех доступных режимах. Скажем, сравнение двоичных файлов предусматривает также правку посредством HEX-редактора. При работе с изображениями различия отображаются как пиксели, не говоря уже о полноценном редактировании файлов. MP3-файлы можно сравнивать по метаданным. Поддержка дополнительных форматов обеспечивается плагинами.

В режиме сравнения файлов используется традиционный двухпанельный интерфейс. Цвет шрифта позволяет отметить важные различия (красная маркировка) и менее существенные (синяя), фоновый цвет также несет функциональное значение. Для правки текста предусмотрен полноценный редактор исходного кода с поддержкой соответствующих форматов (см. Tools → File Formats).

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

Отображение данных регулируется посредством файлового фильтра (вывод указанных типов файлов) или фильтра отображения (показ изменений). Все необходимые инструменты вынесены на панель инструментов справа от вкладок. В меню Actions находятся команды, связанные с синхронизацией и сравнением. Управление отображением доступно в меню View.

В сравнении каталогов могут быть задействованы различные источники — не только локальные, но также и удаленные каталоги, архивы (поддерживаются форматы RAR, ZIP, 7z и мн. др.), снимки файловой структуры (snapshots). Благодаря предосмотру, можно заранее ознакомиться с результатом синхронизации.

Рутинные задачи автоматизируются с помощью скриптов. В Beyond Compare есть поддержка командной строки и регулярных выражений. Отчет доступен для печати или вывода в форматах HTML и TXT.

Резюме. Beyond Compare представляет собой многофункциональное решение для синхронизации, слияния, редактирования различных типов данных. Наравне с функциональностью, очень удобен многовкладочный интерфейс с поддержкой сессий и рабочих пространств. В результате, программа хороша при работе как с малыми, так и с достаточно сложными проектами.

[+] Удобный интерфейс
[+] Работа с архивами и удаленными каталогами
[+] Возможности автоматизации
[+] Доступные фильтры и режимы отображения

Compare++

Compare++ представляет собой программу для сравнения директорий и текстовых файлов в ОС Windows. Позиционируется, прежде всего, как инструмент для программистов и веб-разработчиков: благодаря распознаванию функций, классов, документ с исходным кодом легко структурируется, удобен в навигации, редактировании.

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

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

Сравнение директорий осуществляется без предосмотра. Синхронизация содержимого архивов и с удаленным сервером не предусмотрена, зато можно сохранять снимки файловой структуры и применять фильтры для файлов и каталогов. На панели инструментов также можно обнаружить дополнительные режимы отображения. Сравнение осуществляется по свойствам файла — дате модификации и размеру, возможно рекурсивное и сравнение по содержимому (соответствующие опции доступны в секции Folder Compare настроек). Колонки сортируются, но не поддаются настройке.

Возможна работа через интерфейс командной строки. Соответственно, Compare++ интегрируется с продуктами SVN, Git, Perforce, Microsoft TFS, SourceSafe и прочими системами в качестве внешнего инструментария для сравнения.

Резюме. Compare++ можно рассматривать как хорошо настраиваемый редактор исходного кода, с функциями сравнения и синхронизации. Равно как и наоборот — как программу для синхронизации с редакторскими функциями. В связке с интеграционными возможностями, программа будет полезна как дополнение к IDE-среде.

[−] Нет полноценной поддержки сессий
[−] Отсутствие расширений
[+] Удобная работа с исходным кодом
[+] Трехстороннее слияние
[+] Создание diff-патчей и отчетов

Araxis Merge

Araxis Merge — программа для визуального сравнения, слияния и синхронизации папок. Встроенный редактор распознает различные форматы документов: исходный код, веб-страницы, XML, PDF, Microsoft Office, изображения и т. п. Также в Merge предусмотрена интеграция с популярными системами управления версиями и другими средами разработки.

В Merge задействован вкладочный интерфейс, поддерживается сохранение сеансов и рабочих пространств со всеми настройками в отдельный файл. Лента Ribbon разделена на секции, благодаря этому расположение команд легко запоминается, инструменты для работы с текстом всегда под рукой. Все действия, связанные с редактированием и навигацией по тексту, доступны на ленте. Панель инструментов тщательно настраивается только в Mac OS, возможны и другие различия между версиями Merge, в зависимости от платформы. Расположение панелей легко изменить на вертикальное или горизонтальное расположение, можно добавить дополнительные информационные колонки. Таким образом, программа удобна, ее интерфейс продуман до мелочей.

Merge поддерживает 4 режима сравнения. Дополнительные режимы (сравнение изображений и двоичных данных) не столь интересны ввиду отсутствия инструментов редактирования. Поэтому далее речь будет идти о сравнении файлов и директорий.

Текстовый редактор поддерживает подсветку синтаксиса, нумерацию строк. При сравнении, кроме изменений, отмеченных соответствующим цветом, удобно отслеживать связи между строками посредством соединительных линий (Linking lines). Наведя курсор на соответствующий блок, можно применить для него операцию слияния с соседним файлом (функция Point-and-click merging). Здесь улавливается аналогия с упомянутой в первой части обзора программой SmartSynchronize. В документ можно добавлять закладки и комментарии. Экспорт отчетов, с занесением всех отличий, осуществляется в форматах DIFF, HTML, HTML-слайдшоу и XML.

Второй основной режим работы Araxis Merge — сравнение и синхронизация каталогов. Сильная сторона этого инструмента — поддержка различных источников: виртуальная файловая система, сетевые диски, проекты и другие источники. При сравнении, доступны две панели с отображением структуры каталогов, также несложно активировать режим трехстороннего слияния.

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

В перечне доступных операций — объединение папок, побайтовое сравнение и сравнение по размеру и дате. При автосинхронизации файлы с конфликтами не обрабатываются и откладываются для принятия пользователем решения.

Потенциальные возможности Araxis Merge значительно возрастают, если брать в расчет интеграцию с Mercurial, Git, Subversion, Perforce и другими средами. Расширяемость обеспечивается встроенными в программу плагинами.

Резюме. Araxis Merge — программа с хорошо продуманным интерфейсом, оптимальным набором инструментов для сравнения, синхронизации и слияния данных. Из пожеланий — не хватает дополнительных режимов сравнения данных, в сочетании с удобным редактированием, как в случае с Beyond Compare.

[+] Интеграция со средами разработки
[+] Удобное визуальное сравнение
[+] Переключение режимов отображения
[+] Статистика и отчетность

UltraCompare Professional

UltraCompare позволяет сравнивать текстовые файлы, документы Word, двоичные файлы, каталоги и архивы, локальные, удаленные директории и съемные носители. Поддерживаются автоматическая синхронизация, трехстороннее слияние, поиск дубликатов и прочие вспомогательные операции.

Интерфейс UltraCompare предусматривает как сессии, так и рабочие пространства. Он удобен, не в последнюю очередь, за счет быстрого доступа к файловым операциям: например, можно выбрать для сравнения нужные файлы прямо из боковой панели. Здесь же, в левой панели, можно создать фильтр. Дополнительные опции можно найти в разделе Ignore Options настроек.

На выбор предоставлены следующие режимы работы с данными: сравнение текста и папок (плюс трехстороннее слияние для обоих видов), двоичных файлов, синхронизация папок. Смена режима осуществляется через меню Mode. Выбрав его, можно указать источники для левой и правой панелей, перетянув их в окно и нажав кнопку Go.

При сравнении текста, строки с различиями маркируются фоновым цветом и помечаются символами рядом с нумерацией. Соединительные линии позволяют отследить связь между двумя документами и помогают при слиянии, соответствующие команды доступны в разделе меню Merge. Для редактирования исходного кода рекомендуется прибегнуть к инструментарию программы UltraEdit. Возникает вопрос: насколько целесообразно оплачивать одну из дополнительных возможностей, если стоимость этого редактора выше, чем UltraCompare.

Для рекурсивного и не рекурсивного сравнения доступны локальные, удаленные и съемные источники, также поддерживаются ZIP-, RAR-, JAR- архивы. Результаты сравнения отображаются по обе панели (источник — получатель). Сравнение осуществляется по размеру и возрасту или содержимому файлов.

Пользователь имеет возможность создавать правила синхронизации (rules): замена файлов, удаление устаревших элементов, копирование и прочие. Возможна синхронизация по расписанию. Поддерживается командная строка, в наличии интеграция с приложениями для контроля версий: AnkhSVN Perforce, QVCS, Subversion, TortoiseCVS, TortoiseSVN и другими.

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

[+] Сравнение архивов и удаленных каталогов
[+] Интеграция с приложениями для контроля версий
[+] Трехстороннее сравнение
[−] Ограничения встроенного редактора

ExamDiff Pro

Программа ExamDiff предназначена для визуального сравнения текстовых, двоичных файлов и директорий. В длинном списке основных функций можно обнаружить поддержку плагинов. Благодаря им, возможна работа с такими форматами, как XML, HTML, PDF, MS Excel, Word, PowerPoint и другими.

Очевидно, что для редактирования кода ExamDiff открывает широкие возможности, как по функциональности, так и по удобству. Меню View позволяет настроить отображение панелей на усмотрение пользователя, панель инструментов полностью настраиваема.

Редактор поддерживает подсветку синтаксиса, нумерацию, в документе можно создавать закладки. Предусмотрены различные способы навигации по документу: собственно, навигационная панель, выпадающий список, синхронная прокрутка. Многие действия выполняются без лишних, как часто случается, манипуляций: например, для перехода к настройкам цветовой схемы достаточно кликнуть по маркировкам в статусной строке, для добавления исключения — поставить флажок Skip возле выпадающего списка, а через контекстное меню открывается доступ к командам плагинов.

Среди дополнительных возможностей для синхронизации директорий — поддержка удаленных источников, архивов. В ExamDiff можно создавать снимки для последующего сравнения, применять фильтры для различных групп файлов (в настройках имеется ряд предустановок), применять фильтры по временной отметке и размеру.

Помимо редакций Pro Standard и Pro Master, существует бесплатная версия ExamDiff. В ней нет трехстороннего слияния, сравнения директорий и двоичных файлов.

Резюме. ExamDiff Pro содержит необходимые инструменты для редактирования. Редактор адаптирован для работы с большими документами, исходным кодом, позволяя быстро ориентироваться по документу и переходить в нужный участок файла.

[+] Гибкая настройка
[+] Расширенные функции редактирования
[+] Поддержка расширений
[+] Удобная навигация по документам

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

Итак, в Windows (XP, Vista) есть ли какая-либо команда (встроенная) или какой-либо сторонний инструмент / утилита (коммерческая или бесплатная - либо) для сравнения двух папок с помощью командной строки.

Есть встроенная команда COMP , которую вы можете использовать. Это немного зависит от того, что вы действительно хотите сравнить.

Сравнивает содержимое двух файлов или наборов файлов.

COMP [data1] [data2] [/ D] [/ A] [/ L] [/ N = число] [/ C]

data1 Задает расположение и имя (имена) первого файла (ов) для сравнения.

data2 Задает расположение и имя (имена) вторых файлов для сравнения.

/ D Отображает различия в десятичном формате.

/ A Отображает различия в символах ASCII.

/ L Отображает номера строк для различий.

/ N = число Сравнивает только первое указанное количество строк в каждом файле.

/ C Игнорирует регистр букв ASCII при сравнении файлов.

Для сравнения наборов файлов используйте подстановочные знаки в параметрах data1 и data2.

Используйте синтаксис вроде COMP c:\folder1 c:\folder2 для сравнения всех файлов в folder1 с содержимым folder2 . Если вам нужно рекурсивно переходить в подкаталоги, вам нужно использовать пакетный сценарий, используя цикл FOR и команды PUSHD и POPD .

Просто оставьте комментарий, если вам нужна помощь.

Вы можете найти GNU diffutils, скомпилированный для Windows, по адресу GnuWin32.

Я использую версии инструментов командной строки Unix Cygwin:

Раньше я также использовал MinGW. У обоих есть несколько подводных камней, но они «достаточно близки». Что касается визуальных различий, мне очень нравится WinMerge.

Будет работать, но я не могу удалить вопрос после первого сравнения.

Основываясь на ответе Мартина Турноя, я написал следующее (и он работает хорошо):

Он смотрит в подкаталоги и не задает никаких вопросов .

Мои два каталога имеют одинаковую структуру, только несколько версий изменений в файлах. Кроме того, мой каталог был просто папкой с файлами Python. Так что мне сошло с рук .

Читайте также: