Побитовое сравнение двух каталогов (файлов) в Perl - PullRequest
0 голосов
/ 28 февраля 2012

Я пытаюсь выполнить следующие действия, используя perl

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

Результат выполнения сценария - (PASSED или FAILED) формируется в соответствии с: Результат НЕУДАЧЕН, когда хотя бы один файл из первого каталога не поразрядно равен соответствующему файлу во втором каталоге или если во втором каталоге нет соответствующего файла.В противном случае тест пройден.

До сих пор я пробовал подход, созданный мной в этой теме - Сравнение двух каталогов с использованием Perl .Через некоторое время я понял, что я по сути пытаюсь симулировать «diff -r dir1 dir2», который не является целью. Как можно выполнить операцию побитового сравнения двух каталогов?

EDIT: Test Case

  /dir1                       /dir2
       -- file1                   -- file1 
       -- file2                   -- file2  
       -- file3 
       -- ....
       -- ...
       ---/subDir1
            --file1
            --file2

file1 of dir1 contains :- foo bar
file1  of dir2 contains :- foo 
Result - Fail

file1  of dir1 contains :- foo bar
file1  of dir2 contains :- foo bar
Result - Pass.

Сценарий должен по существуизвлекать файлы с одинаковыми именами в разных каталогах.

1 Ответ

1 голос
/ 28 февраля 2012

Я бы сделал что-то вроде этого:

  1. Открыть dir1
  2. Считать все имена файлов в массив
  3. Открыть dir2
  4. Читать все имена файловв массив
  5. Для любого случая, когда имя файла в dir1 совпадает с именем файла в dir2 или наоборот, начните логику сравнения
  6. Используйте Digest :: MD5 здесь для выполненияMD5 сравнение двух файлов.Если хотя бы один бит выключен, вы получите разные контрольные суммы.

Пример кода из Digest :: MD5 ...

 use Digest::MD5 qw(md5 md5_hex md5_base64);
 $digest = md5($data);
 $digest = md5_hex($data);
 $digest = md5_base64($data);
 # OO style
 use Digest::MD5;
 $ctx = Digest::MD5->new;
 $ctx->add($data);
 $ctx->addfile(*FILE);
 $digest = $ctx->digest;
 $digest = $ctx->hexdigest;
 $digest = $ctx->b64digest;

Создайте хеш-код MD5 для каждого файла и сравните их, а затем передайте или завершите неудачей соответственно.

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