dARKest
06-07-2009, 18:19
Использую "GNU utilities for Win32"
В частности md5sum.exe, wget
Задача: Скачивать данные с FTP, предварительно проверив нужна новая закачка или докачка, или вообше не нужно скачивать.
Есть FTP сервер с данными
для каждого файла есть файл с ".md5" (их скачиваю каждый раз без условий)
На клиенте:
дирректория с данными c:\1\data\
для всех файлов которые были скачаны в прошлый раз посчитаны md5 и сложены в c:\1\local\
все md5 с сервера прошлой закачки в c:\1\old\
UserPass_ftp=ftp:ftp
set ftp_ip=10.8.0.26
set ftp_path=/data/
set path_local_data=c:\1\data\
rem Посчитать локальные MD5
del .\local\*.md5
for %%i in (*.*) do md5sum.exe %%i > .\local\%%i.md5
rem Переместить старые серверные MD5
move /Y *.md5 ./old
rem Скачать новые MD5 с сервера
wget -t2 ftp://%UserPass_ftp%@%ftp_ip%%ftp_path%md5/*.md5
REM сравнить MD5 с сервера со старым
for %%i in (*.md5) do (
fc %%i .\old\%%i
echo %ERRORLEVEL%
if %ERRORLEVEL%==1 do (
set tempname=%path_local_data%%%i
)
)
Вопрос в том что ERRORLEVEL всегда ноль.
Идея исользовать ERRORLEVEL пришла от diff в NIX системах
Команда diff возвращает код завершения 0, если сравниваемые файлы идентичны и 1, если они отличаются. Из "GNU utilities for Win32" то же ноль :(
Какие есть альтернативы?
В частности md5sum.exe, wget
Задача: Скачивать данные с FTP, предварительно проверив нужна новая закачка или докачка, или вообше не нужно скачивать.
Есть FTP сервер с данными
для каждого файла есть файл с ".md5" (их скачиваю каждый раз без условий)
На клиенте:
дирректория с данными c:\1\data\
для всех файлов которые были скачаны в прошлый раз посчитаны md5 и сложены в c:\1\local\
все md5 с сервера прошлой закачки в c:\1\old\
UserPass_ftp=ftp:ftp
set ftp_ip=10.8.0.26
set ftp_path=/data/
set path_local_data=c:\1\data\
rem Посчитать локальные MD5
del .\local\*.md5
for %%i in (*.*) do md5sum.exe %%i > .\local\%%i.md5
rem Переместить старые серверные MD5
move /Y *.md5 ./old
rem Скачать новые MD5 с сервера
wget -t2 ftp://%UserPass_ftp%@%ftp_ip%%ftp_path%md5/*.md5
REM сравнить MD5 с сервера со старым
for %%i in (*.md5) do (
fc %%i .\old\%%i
echo %ERRORLEVEL%
if %ERRORLEVEL%==1 do (
set tempname=%path_local_data%%%i
)
)
Вопрос в том что ERRORLEVEL всегда ноль.
Идея исользовать ERRORLEVEL пришла от diff в NIX системах
Команда diff возвращает код завершения 0, если сравниваемые файлы идентичны и 1, если они отличаются. Из "GNU utilities for Win32" то же ноль :(
Какие есть альтернативы?