Получение контрольной суммы файла через vsFTPd

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

Я предполагаю, что это означает, что команда HASH так или иначе отключена или запрещена, но часы поиска с помощью Google должны все же сказать мне, как включить его, или если vsFTPd поддерживает команду HASH вообще.

Кто-либо знает, возможно ли это? С другой стороны, если vsFTPd не поддерживает команду HASH, есть ли другой FTP-сервер для Ubuntu, которую я могу использовать?

Вот пример:

erlend@server:~$ ftp localhost
Connected to localhost.localdomain.
220 (vsFTPd 3.0.3)
Name (localhost:erlend): erlend
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
200 EPRT command successful. Consider using EPSV.
150 Here comes the directory listing.
-rw-r--r--    1 1002     1002       102653 Oct 05 08:19 myfile.zip
226 Directory send OK.

Но когда я пытаюсь получить хеш файла, я добираюсь:

ftp> HASH  myfile.zip
?Invalid command

Попробованный без аргумента (и нижний регистр!), как предложено в комментариях:

ftp> hash
Hash mark printing off.
ftp> hash
Hash mark printing on (1024 bytes/hash mark).
ftp> hash 1
Hash mark printing on (1 bytes/hash mark).
ftp> hash 2
Hash mark printing on (2 bytes/hash mark).
ftp> hash
Hash mark printing off.
ftp> hash myfile.zip
Hash mark printing off.
3
задан 15 October 2018 в 14:10

2 ответа

На Вашем сервере имеют задание крона, которое ежедневно работает в /etc/cron.daily. Никакое специальное предложение crontab волшебство должно быть сделано. Просто, но исполняемый сценарий там.

Вот тот, который я уже имею удобный для вычисления сумм хеша на файлах:

#!/bin/bash

    md5sum \
        install.sh \
        eyesome.sh \
        eyesome-cfg.sh \
        eyesome-src.sh \
        eyesome-sun.sh \
        wake-eyesome.sh \
        start-eyesome \
        daily-eyesome-sun \
        systemd-wake-eyesome \
        acpi-lid-eyesome.sh \
        acpi-lid-event-eyesome \
        eyesome-dbus.sh \
        > eyesome.md5

Таким образом, Вы загрузили бы файл eyesome.md5 к Вашей удаленной машине.

$ cat eyesome.md5
2627fe73a1c99c1ec02a17002cf88dad  install.sh
62999343cd603c4bff70e890367739bb  eyesome.sh
c42766c412b31c45d814efea36c1021b  eyesome-cfg.sh
8e56b945b9173dee4cceecb1b111b28a  eyesome-src.sh
d70ca24ca2aea58b043d86e9bdd15c0e  eyesome-sun.sh
28b0fde9a98933fee0226c49350fdc6c  wake-eyesome.sh
712eff1f4ec14fbf04521674c32aa5b8  start-eyesome
0cdc4dbb0a383cd97f1e6d0744a6f8e4  daily-eyesome-sun
5a2abb831f31a7339270868ddd37f745  systemd-wake-eyesome
e06f195dcf254d65b4f8512d46e44458  acpi-lid-eyesome.sh
8ce2412bdb1bab4bca6e4921f9ae282b  acpi-lid-event-eyesome
54e3052f12ca33fc53e38b01d4dd05d6  eyesome-dbus.sh

Примечание: Если Ваши имена файлов снабжаются префиксом путь, Вам, вероятно, придется изменить его от пути сервера до Вашего локального пути с sed, grep или другая утилита.

Затем выполненный:

$ md5sum -c eyesome.md5
install.sh: OK
eyesome.sh: OK
eyesome-cfg.sh: OK
eyesome-src.sh: FAILED
eyesome-sun.sh: OK
wake-eyesome.sh: FAILED
start-eyesome: OK
daily-eyesome-sun: OK
systemd-wake-eyesome: OK
acpi-lid-eyesome.sh: OK
acpi-lid-event-eyesome: OK
eyesome-dbus.sh: OK
md5sum: WARNING: 2 computed checksums did NOT match

Файлы тот сбой (eyesome-src.sh и wake-eyesome.sh) необходимо загрузить.

0
ответ дан 1 December 2019 в 20:13

Это не ответит на Ваш вопрос о сравнении ХЕША, однако, является слишком длинным для комментария.

Если Вы не хотите загружать файлы дважды, загружая файлы, которые имеют другое время изменения, или другой размер должен быть достаточно в большинстве ситуаций. Если это верно, этот ответ об использовании lfpt будет полезен.

Это использует mirror опция сохранить Вашу папку FTP и локальные папки в синхронизации, загружающей только файлы, которые изменились.

Из связанного ответа GabrieleV:

#!/bin/bash    
HOST="your.ftp.host.dom"
USER="username"
PASS="password"
FTPURL="ftp://$USER:$PASS@$HOST"
LCD="/path/of/your/local/dir"
RCD="/path/of/your/remote/dir"
#DELETE="--delete"
lftp -c "set ftp:list-options -a;
open '$FTPURL';
lcd $LCD;
cd $RCD;
mirror --reverse \
       $DELETE \
       --verbose \
       --exclude-glob a-dir-to-exclude/ \
       --exclude-glob a-file-to-exclude \
       --exclude-glob a-file-group-to-exclude* \
       --exclude-glob other-files-to-exclude"

Предупреждение: удостоверьтесь, что целевой каталог существует, иначе команда CD перестанет работать, таким образом, операция включая удаление деревьев файлов произойдет в неправильном каталоге (корень)!

0
ответ дан 1 December 2019 в 20:13

Другие вопросы по тегам:

Похожие вопросы: