![]() |
Необходимо реализовать задачу с расчётом хеша в директориях и сохранением в фаил.
Мне это необходимо для автоматизированного бекапа через программу GoodSync, там можно выполнять команды до синхронизации(бекапа).
Так вот я хочу чтобы перед синхронизацией создавался по всем правилам созданный фаил с контрольной суммой всех файлов в директории и поддиректориях, исключая при этом файлы Thumbs.db (и не только, зависит от конкретной бекап-задачи). Причём чтобы была возможность сохранять этот фаил со списком контрольных сумм файлов в произвольном месте а не сканируемой директории. Искал консольные утилиты для расчёта контрольных сумм, но так и не нашёл таких, в которых было бы возможно задавать исключения для определённых имён файлов. |
|
Iska,
1 MD5 2 Windows XP, Windows 7. |
Думаю, для вычисления удобнее всего будет использовать скрипт на PowerShell, скажем: Use PowerShell To Calculate the Hash of a File | Learn Powershell | Achieve More и т.п.
|
Iska, боюсь мне самому не осилить скриптовый язык :-(
|
Код:
function GetMD5Hash([System.String]$sFile) { |
Iska, спасибо. Вот только необходимо чтобы пути были относительными. Так как бекапы на удалённом устройстве располагаются по другим путям. Да и если их верифицировать на основном компьютере всё равно они будут лежать по другим путям.
Сейчас всё отображается вот так C:\Test\123.txt C:\Test\sync\test1.jpg C:\Test\sync\test2.jpg а необходимо вот так. *123.txt *sync\test1.jpg *sync\test2.jpg И хотелось бы в начале списка дату со временем, например ; Generated on 2013-12-17 at 13:00:00 |
Пробуйте:
|
Iska, результирующий файл контрольных сумм не воспринимает программа чекер из-за двух моментов.
Первый момент заключается в том что фаил использует какую-то экзотическую кодировку UCS-2 Little Endian (согласно Notepad++) за место UTF-8. И второй момент заключается в том что между контрольной суммой и именем файла стоит символ не пробела (а Tab?). Я в Notepad++ преобразовал фаил в UTF-8, сменил удлинённый пробел на обычный и вроде как всё работает. Надеюсь что это можно исправить в самом скрипте :-) |
Цитата:
Цитата:
Цитата:
|
echo Generated on `date` > /var/log/md5.hashes; find $DIR_TO_BACKUP -type f \! -name Thumbs.db -exec md5sum {} \; >> /var/log/md5.hashes
Правда это не для Windows... |
Цитата:
Цитата:
Я радовался, радовался. А потом понял что скрипт и так не обрабатывает Thumbs.db, и не потому что в списках исключения а потому что имеет скрытый атрибут (и возможно системный?) . И соответственно другие файлы с атрибутом "скрытый" тоже :-( Это можно как-нибуть излечить? И ещё если это возможно очень бы хотелось чтобы в комментарии прописывалось общее число просканированных файлов. Что то вроде такого. ; Generated on 03/03/2013 02:37:09 ; Scanned files: 3563 А если уж совсем идеально, то можно добавить к просканированным файлам ещё и общее количество (с учётом исключений). Например вот так. ; Generated on 03/03/2013 02:37:09 ; Scanned files: 3563 ; Total files: 3572 --- UPD --- И обмозговав свои будущие проекты я понял что мне необходимо исключать не только файлы но и папки. Быть может стоит вынести в переменную в начало файла-скрипта некий список? Я не знаю как это сделать, но примерно я представляю это так. %files% Thumbs.db Descript.ion %folders% D:\Workfolder\Caсhe\ (или с относительными путями к сканируемой корневой папке) D:\TestSun\Profile\Temp\ и так далее каждый новый объект с новой строчки. Соответственно наверное если реализовать это то предложение с подсчётом исключённых файлов и самое главное папок уже будет не столь состоятельным. Ну если эта фича сложна в реализации то без неё проживу :-) Главное это подсчёт всех файлов (включая скрытые и системные) и введение исключений и на папки. |
{
echo "; Generated on `date`" echo "; Scanned files: `find $DIR_TO_BACKUP -type f \! -name Thumbs.db | wc -l`" echo "; Total files: `find $DIR_TO_BACKUP -type f | wc -l`" find $DIR_TO_BACKUP -type f \! -name Thumbs.db -exec md5sum {} \; } > /var/log/md5.hashes Опять-таки не для Windows :sorry: |
AMDBulldozer, спасибо конечно. Но я использую исключительно Windows :-) Хотелось бы закончить этот "проект века" наконец и забекапить по всем правилам и своим внутренним критериям все свои многочисленные файлы :-)
|
Цитата:
Цитата:
Цитата:
Цитата:
|
Iska, Огромное спасибо что помогаете мне в реализации, ваша помощь бесценна :-)
Подсчёт исключённых действительно был бы избыточен, желательно просто реализовать подсчёт общего количества просканированных файлов и соответственно хеш-записей. И не более. Касаемо же путей, я просто подумал если в скрипте указывается жёстко рабочая папка, то наверное при написании папок-исключений необходимо отталкиваться относительно её, а это значит пути будут относительными. Хотя конечно окончательный выбор за вами. В моём случае сканируемые папки на компьютере не перемещаются. Но в тоже время относительно вывода (хеш-файла) ничего не меняется, там так и должны быть относительные пути. |
Пробуйте:
Цитата:
|
Iska, Спасибо :-)
Прогнал скрипт в типичных задачах и вроде всё работает :-) Единственный вопрос возник по этому поводу Цитата:
|
Цитата:
Цитата:
|
Цитата:
Цитата:
Думаю его и использовать... |
|
Цитата:
|
Ну, тогда используйте предыдущий вариант ;).
|
Iska, спасибо огромное за помощь, за создание и доведение до финала столь необходимого мне скрипта :-)
Пока не щёлкну обсуждение решённым, ибо прямо сейчас приступлю к тестированию в реальных задачах :-) |
Время: 14:38. |
Время: 14:38.
© OSzone.net 2001-