Удалить последовательные, идентичные, дубликаты файлов - PullRequest
0 голосов
/ 06 апреля 2011

У меня есть сервер под управлением Windows Server 2003 R2 Enterprise с каталогами от 50 000 до 250 000 текстовых файлов по 1 КБ каждый. Имена файлов являются последовательными (например, MLLP000001.rcv, MLLP000002.rcv и т. Д.), И идентичные файлы будут последовательными. Как только последующие файлы различаются, я могу ожидать, что я не получу другой идентичный файл.

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

for each file in the target directory index 'i'
{
  for each file in the target directory index 'j' = i+1
  {
    compare the hash values of files i and j

    if the hashes are identical
      delete file j
    if the hashes differ
      set i = j // to skip past the files that are now deleted
      break
  }
}

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

Ответы [ 2 ]

1 голос
/ 07 апреля 2011

Поскольку размер файлов составляет всего 1 КБ, почему бы не выполнить побитовое сравнение и избежать хэша?

0 голосов
/ 07 апреля 2011

Похоже, вы могли бы сделать что-то вроде:

Set Files to an array of files in a given directory.
Set PreviousHash to hash of the first file in the Files.

For each CurrentFile file after the first in Files,
    Set CurrentHash to hash of the CurrentFile.
    If CurrentHash is equal to PreviousHash, then delete CurrentFile.
    Else, set PreviousHash to CurrentHash.
...