Как сравнить содержимое двух папок
Перейти к содержимому

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

  • автор:

Как быстро сравнить и синхронизировать две папки

Довольно часто бывает необходимо быстро посмотреть, чем отличается содержимое двух папок, и затем, возможно, произвести синхронизацию, сделав их содержимое идентичным. Конечно, для этих целей можно создать и потом выполнить специально настроенный профиль синхронизации. Но в случае если требуется лишь однократная синхронизация, создание профиля не вполне оправдано.
@MAX SyncUp позволяет вам сравнить и синхронизировать две папки буквально в несколько кликов прямо из Проводника Windows.

Предположим, что вам надо увидеть, чем отличаются клипарты на вашем ноутбуке и стационарном компьютере, и скопировать на ноутбук отсутствующие там файлы. Также будем считать, что @MAX SyncUp установлен на ПК, и папка на ноутбуке доступна по сети.

Для того чтобы быстро сравнить и синхронизировать две папки, проделайте следующее:

  1. На ПК откройте Проводник Windows, выберите папку, в которой хранится клипарт, щелкните правой кнопкой мышки и в контекстном меню выберите пункт Compare and Sync. Это приведет к запуску мастера Сравнения и Синхронизации папок.
  2. В поле Target paths укажите папку на ноутбуке, в которой находится клипарт (используйте кнопку Browse).
    Это все! Теперь вы можете нажать Proceed, чтобы запустить процесс сравнения.
    В более сложных случаях вы можете перед этим:
    • Изменить набор синхронизируемых данных на закладке Data to synchronization,
      например, исключить некоторые вложенные папки;
    • Выбрать размещение (FTP, Google Drive), тип и другие параметры хранилища для второй стороны синхронизации на закладке Storage options;
    • Задать фильтр для синхронизируемых файлов на закладке File filter;
    • Настроить дополнительные параметры на закладке Advanced options.

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

См. также:

  • Резервное копирование файлов
    • Как настроить бэкап с использованием жестких ссылок в стиле Apple Time Machine
    • Как настроить бэкап в Google Drive или любое WebDAV-хранилище
    • Как настроить резервное копирование файлов на сетевой ПК или NAS
    • Как восстановить файлы
    • Как настроить прямую синхронизацию двух компьютеров через Интернет
    • Как настроить нестандартную синхронизацию с Google Drive
    • Как настроить синхронизацию с SFTP-сервером

    Практическое руководство. Сравнение содержимого двух папок (LINQ) (Visual Basic)

    В этом примере демонстрируются три способа сравнения двух списков файлов:

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

    Примечание. Методы, представленные в этом примере, можно адаптировать для сравнения последовательностей объектов любого типа.

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

    Пример

    Module CompareDirs Public Sub Main() ' Create two identical or different temporary folders ' on a local drive and add files to them. ' Then set these file paths accordingly. Dim pathA As String = "C:\TestDir" Dim pathB As String = "C:\TestDir2" ' Take a snapshot of the file system. Dim dir1 As New System.IO.DirectoryInfo(pathA) Dim dir2 As New System.IO.DirectoryInfo(pathB) Dim list1 = dir1.GetFiles("*.*", System.IO.SearchOption.AllDirectories) Dim list2 = dir2.GetFiles("*.*", System.IO.SearchOption.AllDirectories) ' Create the FileCompare object we'll use in each query Dim myFileCompare As New FileCompare ' This query determines whether the two folders contain ' identical file lists, based on the custom file comparer ' that is defined in the FileCompare class. ' The query executes immediately because it returns a bool. Dim areIdentical As Boolean = list1.SequenceEqual(list2, myFileCompare) If areIdentical = True Then Console.WriteLine("The two folders are the same.") Else Console.WriteLine("The two folders are not the same.") End If ' Find common files in both folders. It produces a sequence and doesn't execute ' until the foreach statement. Dim queryCommonFiles = list1.Intersect(list2, myFileCompare) If queryCommonFiles.Count() > 0 Then Console.WriteLine("The following files are in both folders:") For Each fi As System.IO.FileInfo In queryCommonFiles Console.WriteLine(fi.FullName) Next Else Console.WriteLine("There are no common files in the two folders.") End If ' Find the set difference between the two folders. ' For this example we only check one way. Dim queryDirAOnly = list1.Except(list2, myFileCompare) Console.WriteLine("The following files are in dirA but not dirB:") For Each fi As System.IO.FileInfo In queryDirAOnly Console.WriteLine(fi.FullName) Next ' Keep the console window open in debug mode Console.WriteLine("Press any key to exit.") Console.ReadKey() End Sub ' This implementation defines a very simple comparison ' between two FileInfo objects. It only compares the name ' of the files being compared and their length in bytes. Public Class FileCompare Implements System.Collections.Generic.IEqualityComparer(Of System.IO.FileInfo) Public Function Equals1(ByVal x As System.IO.FileInfo, ByVal y As System.IO.FileInfo) _ As Boolean Implements System.Collections.Generic.IEqualityComparer(Of System.IO.FileInfo).Equals If (x.Name = y.Name) And (x.Length = y.Length) Then Return True Else Return False End If End Function ' Return a hash that reflects the comparison criteria. According to the ' rules for IEqualityComparer(Of T), if Equals is true, then the hash codes must ' also be equal. Because equality as defined here is a simple value equality, not ' reference identity, it is possible that two or more objects will produce the same ' hash code. Public Function GetHashCode1(ByVal fi As System.IO.FileInfo) _ As Integer Implements System.Collections.Generic.IEqualityComparer(Of System.IO.FileInfo).GetHashCode Dim s As String = fi.Name & fi.Length Return s.GetHashCode() End Function End Class End Module 

    Компиляция кода

    Создайте проект консольного приложения Visual Basic с инструкцией Imports для пространства имен System.Linq.

    См. также

    • LINQ to Objects (Visual Basic)
    • LINQ и каталоги файлов (Visual Basic)

    Как сравнить файлы по содержимому в Windows или Linux?

    Веб-мастерам или владельцам сайтов часто бывает необходимо сравнить два файла по содержимому. Из этой статьи вы узнаете как сравнить два файла между собой. Здесь описаны все известные мне способы для сравнения текстовых файлов и скрипты (html, css, php и так далее).

    Способ 1. Meld

    Meld — графический инструмент для получения различий и слияния двух файлов, двух каталогов. Meld — визуальный инструмент сравнения и объединения файлов и каталогов для Linux. Meld ориентирован, в первую очередь, для разработчиков. Однако он может оказаться полезным любому пользователю, нуждающемуся в хорошем инструменте для сравнения файлов и директорий.

    В Meld вы можете сравнивать два или три файла, либо два или три каталога. Вы можете просматривать рабочую копию из популярных систем контроля версий, таких, таких как CVS, Subversion, Bazaar-NG и Mercurial. Meld представлен для большинства linux дистрибутивов (Ubuntu, Suse, Fedora и др.), и присутствует в их основных репозиториях.

    # apt install meld

    Meld существует и под Windows, но я не рекомендую его использовать в этой операционной системе.

    Способ 2. Сравнение содержимого двух файлов в программе WinMerge.

    Поддерживаемые операционные системы: Windows

    Бесплатная программа WinMerge позволяет сравнивать не только содержимое файлов, она также сравнивает содержимое целых папок. WinMerge является Open Source инструментом сравнения и слияния для Windows. WinMerge может сравнивать как файлы, так и папки, отображая различия в визуальной текстовой форме, которые легко понять и обработать.

    После установки, открываете пункт меню «Файл» — «Открыть». Выбираете файлы для сравнения. Для этого нажимаете на кнопку «Обзор» и выбираете файл. Выбрав файлы, нажимаете на кнопку «ОК».

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

    Способ 3. diff

    diff — утилита сравнения файлов, выводящая разницу между двумя файлами.

    Для сравнения каталогов используйте эту команду:

    $ diff -qr current-directory> backup-directory>

    Способ 4. Kompare

    Kompare — отображает различия между файлами. Умеет сравнивать содержимое файлов или каталогов, а также создавать, показывать и применять файлы патчей. Kompare — это графическая утилита для работы с diff, которая позволяет находить отличия в файлах, а также объединять их. Написана на Qt и рассчитана в первую очередь на KDE. Вот ее основные особенности:

    Поддержка нескольких форматов diff;
    Поддержка сравнение файла linux и каталогов;
    Поддержка просмотра файлов diff;
    Настраиваемый интерфейс;
    Создание и применение патчей к файлам.

    Способ 5. Сравнение файлов в программе Total Commander

    Поддерживаемые операционные системы: Windows

    В Total Commander существует инструмент сравнения файлов по содержимому, где можно не только сравнить содержимое, но и редактировать его и копировать из одного файла в другой.

    После запуска Total Commander – в одной из панелей выбираете (клавиша Insert) первый файл для сравнения – во второй панели открываете папку со вторым файлом и ставим на него курсор. Вызываем программу для сравнения: «Файлы→Сравнить по содержимому».

    Для внесения изменений в файл достаточно нажать на кнопку «Редактировать». В программе доступны функции копирования и отката, поиска и изменение кодировки. Если вы внесли изменения в файл, то после закрытия окна сравнения, будет предложено сохранить изменения.

    Способ 6. Сравнение файлов в Notepad++

    Поддерживаемые операционные системы: Windows, возможен запуск в Linux

    Notepad++ не умеет сравнивать файлы. Для появления этого функционала в Notepad++ нужно установить плагин «Compare».

    Запускаете редактор – переходите в пункт меню «Плагины» — «Plugin Manager» — «Show Plugin Manager». В новом окне выбираете плагин «Compare» и жмёте кнопку «Install».

    После установки плагина откройте два файла и выбирите меню «Плагины» — «Compare» — «Compare (Alt+D)». Результат сравнения файлов будет представлен в отдельных панелях. Напротив строк, в которых найдены отличия будет стоять предупреждающий знак.

    Способ 7. Сравнение файлов с помощью командной строки Windows

    Сравнение с помощью командной строки Windows (cmd.exe) не позволяет редактировать файлы, но просто сравнить содержимое файлов, используя этот способ, вы можете.

    Для вызова командной строки Windows перейдите «Пуск» — «Все программы» — «Стандартные» — «Командная строка» или нажмите клавиш «Windows+R», введите cmd и нажмите клавишу Enter.

    В командной строке введите команду:

    fc /N путь к первому файлу путь ко второму файлу

    Способ 8. Сравнение двух текстовых файлов утилитой comm в Unix

    Unix утилита comm входит в стандартную поставку всех Unix- дистрибутивов, таких как FreeBSD, GNU/Linux (пакет GNU Coreutils) и другие.

    Программа comm используется для построчного сравнения двух текстовых файлов с отсортированными по алфавиту строками, в соответствии с используемой локалью. Для сортировки можно использовать утилиту sort.

    При вызове без параметров рассматриваемая утилита будет выводить строки в трех столбцах: первый столбец будет содержать строки, присутствующие лишь в файле 1, второй столбец — строки, присутствующие лишь в файле 2, а третий столбец — строки, присутствующие в обоих файлах. Утилита поддерживает параметры -1, -2 и -3, позволяющие не выводить столбцы под соответствующими номерами. Статус завершения работы утилиты не зависит от результата распределения строк по столбцам; в случае успешного распределения строк утилита завершает работу с нулевым статусом, в случае возникновения любой ошибки — с ненулевым.

    Базовый синтаксис команды выглядит следующим образом:

    $ comm [параметры] файл 1> файл 2>

    Параметры запуска: -1 Подавить вывод первой колонки; -2 Подавить вывод второй колонки; -3 Подавить вывод третьей; -i Нечувствительное к регистру сравнение строк.

    Примеры запуска утилиты comm для сравнения двух файлов по содержимому:

    comm -1 file1 file2 сравнить содержимое двух файлов, не отображая строки принадлежащие файлу ‘file1’
    comm -2 file1 file2 сравнить содержимое двух файлов, не отображая строки принадлежащие файлу ‘file2’
    comm -3 file1 file2 сравнить содержимое двух файлов, удаляя строки встречающиеся в обоих файлах
    запуск comm с предварительной сортировкой

    comm (sort file1.txt) (sort file2.txt)

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

    sed 's/[^0-9]//g'  input > output

    . В итоге получаем такую команду:

    comm (sed 's/[^0-9]//g' file1.txt | sort) (sed 's/[^0-9]//g' file2.txt | sort)

    Как сравнить две папки с документами?

    Имеется две папки с PDF файлами.
    Папка №1 PDF файлы = 5816 шт
    Папка №2 PDF файлы = 5665 шт
    Папка №1 это PDF файлы до сжатия, Папка №2 PDF файлы после сжатия. Имена файлов одинаковые. Проблема в том, что в процессе сжатия не обработались некоторые PDF. Как выявить необработанные файлы?

    • Вопрос задан более трёх лет назад
    • 5291 просмотр

    Комментировать
    Решения вопроса 1
    seostat @seostat Автор вопроса

    Все оказалось намного проще! Выделил все файлы в папке 1, копировал в папку 2 с заменой, все замененные файлы оказались выделенными после копирования, сделал вырезать и вставил в папку 3. В папке 2 остались необработанный файлы!

    Всем спасибо за варианты!

    Ответ написан более трёх лет назад
    Комментировать
    Нравится Комментировать
    Ответы на вопрос 3

    Написать batch-скрипт, в котором через цикл FOR вы пройдете по всем исходным файлам, проверяя несуществование файла с таким же именем в целевой папке и если он не существует, записывая его имя в log-файл.
    Делается одной строкой.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *