Каким же образом этот сценарий способен унять паранойю при создании резервных копий на CD? Для дублирующей проверки работы моего пишущего привода CD я выполняю команду, как показано ниже. С помощью такой команды я могу также найти изменения, произведенные после предыдущего резервного копирования. И снова, поскольку на моем компьютере привод CD представляется как «G:», я указываю путь с таким корнем. В Linux используйте корень вида /dev/cdrom или /mnt/ cdrom:
C:\…\PP4E\System\Filetools> python diffall.py Examples g:\PP3E\Examples > diff0226
C:\…\PP4E\System\Filetools> more diff0226
…вывод опущен…
Компакт-диск крутится, сценарий сравнивает, и в конце отчета появляется информация о различиях. Пример полного отчета о различиях находится в файле diff*.txt в пакете с примерами для этой книги. А чтобы быть действительно уверенным, я выполняю следующую команду глобального сравнения — чтобы проверить все дерево с резервной копией книги на флешке (которая, с точки зрения файловой системы, ничем не отличается от CD):
C:\…\PP4E\System\Filetools> diffall.py F:\writing-backups\feb-26-10\dev
C:\Users\mark\Stuff\Books\4E\PP4E\dev > diff3.txt
C:\…\PP4E\System\Filetools> more diff3.txt
Comparing F:\writing-backups\feb-26-10\dev to C:\Users\mark\Stuff\Books\4E\PP4E\ dev
Directory lists are identical
Comparing contents
ch00.doc DIFFERS
ch01.doc matches
ch02.doc DIFFERS
ch03.doc matches
ch05.doc matches
ch06.doc DIFFERS
…множество строк опущено…
——————
Comparing F:\writing-backups\feb-26-10\dev\Examples\PP4E\System\Filetools to C:\…
Files unique to C:\Users\mark\Stuff\Books\4E\PP4E\dev\Examples\PP4E\System\ Filetools … copytemp … cpall.py … diff2.txt … diff3.txt … diffall.py … diffs.txt … dirdiff.py … dirdiff.pyc
Comparing contents
bigext-tree.py matches
bigpy—dir.py matches
…множество строк опущено…
Diffs found: 7
— files differ at F:\writing-backups\feb-26-10\dev\ch00.doc —
C:\Users\mark\Stuff\Books\4E\PP4E\dev\ch00.doc
— files differ at F:\writing-backups\feb-26-10\dev\ch02.doc — C:\Users\mark\Stuff\Books\4E\PP4E\dev\ch02.doc
— files differ at F:\writing-backups\feb-26-10\dev\ch04.doc — C:\Users\mark\Stuff\Books\4E\PP4E\dev\ch04.doc
— files differ at F:\writing-backups\feb-26-10\dev\ch06.doc — C:\Users\mark\Stuff\Books\4E\PP4E\dev\ch06.doc
— files differ at F:\writing-backups\feb-26-10\dev\TOC.txt — C:\Users\mark\Stuff\Books\4E\PP4E\dev\TOC.txt
— unique files at F:\writing-backups\feb-26-10\dev\Examples\PP4E\System\Filetools — C:\Users\mark\Stuff\Books\4E\PP4E\dev\Examples\PP4E\System\Filetools
— files differ at F:\writing-backups\feb-26-10\dev\Examples\PP4E\Tools\visitor.py — C:\Users\mark\Stuff\Books\4E\PP4E\dev\Examples\PP4E\Tools\visitor.py
Данный пример показывает, что после создания предыдущей резервной копии я добавил несколько примеров и изменил несколько файлов с текстом глав. Если выполнить эту команду сразу после создания резервной копии, то радаром diffall не будет обнаружено никаких изменений, за исключением файлов, которые вообще не могут быть скопированы. Такое глобальное сравнение может занять несколько минут. Эта операция выполняет побайтовое сравнение всех файлов глав и снимков с экрана, дерева примеров и других, но это точное и полное сравнение. Дерево каталогов этой книги содержит большое количество файлов, и какая-либо менее автоматизированная процедура проверки без помощи Python была бы совершенно немыслима.
После того как этот сценарий был написан, я начал использовать его для проверки резервных копий моих ноутбуков на внешнем жестком диске, создаваемых автоматически. Для этого я запускаю сценарий cpall, написанный нами в предыдущем разделе этой главы, а затем, чтобы проверить результаты и получить список файлов, вызвавших проблемы при копировании, — сценарий сравнения, разработанный здесь. Когда я выполнял эту процедуру в последний раз, было скопировано и проверено 225 000 файлов и 15 000 каталогов, занимающих 20 Гбайт дискового пространства, — это явно не та задача, которую можно выполнить вручную!
Ниже приводятся магические заклинания, которые я вводил на моем ноутбуке с системой Windows. Здесь f:\ — это раздел на внешнем жестком диске, и вас не должно удивлять, что каждая из этих команд выполняется около получаса или даже больше на распространенном аппаратном обеспечении. Копирование, инициированное операцией перетаскивания мышью, выполняется ничуть не быстрее (если вообще выполняется!):
C:\…\System\Filetools> cpall.py c:\ f:\ > f:\copy-log.txt
C:\…\System\Filetools> diffall.py f:\ c:\ > f:\diff-log.txt
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011