Обнаружение дублированных двоичных файлов в одном каталоге (Windows) - PullRequest
1 голос
/ 14 января 2010

У меня около 30 файлов в каталоге размером от 64 КБ до 4 МБ, которые являются файлами BIN. Мне нужно выяснить, есть ли там дубликаты файлов ... Многие файлы имеют одинаковый размер.

Я бы хотел выяснить, есть ли там двоичные идентичные файлы.

Кто-нибудь знает способ сделать это? Я под Windows XP Pro.

Спасибо!

Ответы [ 6 ]

3 голосов
/ 14 января 2010

Это довольно легко. Вы можете использовать два вложенных цикла for в командной строке:

for %x in (*) do @(
    for %y in (*) do @(
        if not "%x"=="%y" @(
            fc /b "%x" "%y" >nul && echo "%x" and "%y" are equal
        )
    )
)

Если вы хотите использовать это в пакетном файле, вам нужно удвоить знаки %.

Код просто зацикливается дважды на все файлы в текущем каталоге:

for %x in (*) do @(
    for %y in (*) do @(

тогда, если два имени файла не равны (потому что тогда мы знаем, что файлы равны)

        if not "%x"=="%y" @(

если запускается утилита fc, которая сравнивает файлы

            fc "%x" "%y" >nul && echo "%x" and "%y" are equal

Если fc имел код выхода 0, это означает, что файлы были равны (то есть дублированы), и в этом случае echo после && срабатывает. && означает «Просто выполните следующую команду, если предыдущая вышла с 0 кодом выхода».

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

ETA: Найдена другая партия; до сих пор нигде публично не объяснялось, но я однажды опубликовал это в Super User .

1 голос
/ 14 января 2010

Хешируйте их с помощью Md5Deep (или аналогичного) или попробуйте проверку дубликатов файлов,

http://www.portablefreeware.com/index.php?sc=77

1 голос
/ 14 января 2010

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

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

И чтобы сохранить все «по теме» с точки зрения программирования (в противном случае этот вопрос, возможно, больше подходит для superuser.com), вот проект C #, который реализует «расширение оболочки» (т.е. дополнительные элементы в контексте проводника Windows меню), которое будет вычислять различные хэши файлов, выбранных в проводнике Windows:

Расширение оболочки генератора файлов хэша

0 голосов
/ 14 января 2010

вы можете использовать fc или fciv (для контрольной суммы)

Или вы можете загрузить утилиты GNU

get Textutils, который содержит md5sum и coreutils, который содержит sort / uniq. тогда сделай это

C:\files>md5sum * | sort | uniq -d -w 32
6f2b448730d23fe68876db87f1ddc143 *file.txt

Чтобы повторить и сделать что-то с результатами, используйте цикл for

0 голосов
/ 14 января 2010

Вы не указываете, как это должно происходить. Может быть, это вопрос, который принадлежит superuser.com, но вы можете использовать такой инструмент, как WinMerge .

Если вам нужно сделать это по коду, вы можете вычислить хеш-значение файлов и сравнить это хеш-значение.

0 голосов
/ 14 января 2010

Создайте хеш (Md5 или sha1) каждого файла и сравните.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...