Ru-Board.club
← Вернуться в раздел «В помощь системному администратору»

» Мониторить/отслеживать обновление содержимого на FTP

Автор: grumm
Дата сообщения: 17.06.2010 14:28
Для начала каким FTP (родным или нет) пользуешься ?

И какой сервер установлен - случаем не R2 ?
Автор: grumm
Дата сообщения: 17.06.2010 16:15
Хм ...Значит необходимо искать программку которая будет отслеживать изменения в данном каталоге, навскидку не скажу ...поискать - думаю найдешь ...

hxxp://www.nirmaltv.com/2009/03/11/monitor-changes-to-any-directory/ru/
например
Автор: venil
Дата сообщения: 17.06.2010 16:36
Можно накидать скриптик, который будет забегать туда раз в полчаса и просматривать каталог файлов на наличие обовлений.
Автор: grumm
Дата сообщения: 17.06.2010 16:39
q111111

на astalaviste искал ????
Автор: chatt
Дата сообщения: 16.08.2016 16:25
Появилось ли решение на данный момент?
Интересует пользовательская программа (или bat), которая просканирует файлы, выявит новые и переименованные и их рекурсивно скачает. Ну или хотя бы сообщит на мыло (может есть такой онлайн-сервис).
Дело в том, что я не храню зеркало ftp сервака, синхронизация не катит. Но нужно узнавать обо всём, что туда заливается. И скачивать это.
Автор: ipmanyak
Дата сообщения: 17.08.2016 07:19
chatt бесплатная утилита wget

http://gnuwin32.sourceforge.net/packages/wget.htm for windows

http://downloads.sourceforge.net/gnuwin32/wget-1.11.4-1-bin.zip

http://www.gnu.org/software/wget/ for linux

wget -N -nr -o wget_log ftp://192.168.2.202/*.*

пихаешь строку в батник, а батник пихаешь в планировщик заданий, не забывай указывать полный путь к exe и рабочий каталог в планировщике.

P.S.
обратная утилита для залива wput
http://wput.sourceforge.net/


Автор: chatt
Дата сообщения: 17.08.2016 15:30
Эта команда просто выведет в txt список всех файлов?

Я так понимаю, нужно три шага
1) получить список
2) полученный новый список сравнить со старым
3) рекурсивно скачать разницу между списками

К сожалению, писать батники не умею.
Автор: ipmanyak
Дата сообщения: 18.08.2016 07:25
chatt Я тебе уже всё написал.
wget с параметром -N скачает новые и измененные файлы. Файлы в локальной папке. Первый раз само собой всё скачает, если локальная папка была пустая. Никаких списков ему не надо, сам разберется. Скачай тулзу и проверь сам , если не веришь. В батнике тебе нужно всего 2 строки:
cd путь\куда класть файлы
путь\wget -N -nr -o wget_log ftp://192.168.2.202/*.*

если будешь класть туда же где лежит и запускаешь сам wget, тогда вообще 1 строка.
wget -N -nr -o wget_log ftp://192.168.2.202/*.*

ftp и путь к папкам на ftp ( если требуется) подставь свои
Автор: vlary
Дата сообщения: 18.08.2016 12:01
chatt
Может, тебе больше BestSync подойдет?
Она для любителей графического интерфейса.
Автор: chatt
Дата сообщения: 18.08.2016 13:53
может, но мне не синхронизация нужна, на серваке уйма файлов, сотни гиг.
поэтому не зеркло мне нужно.
А только лишь обновления

справится ли с этим программа?
или просить помочь с батником?
Автор: ipmanyak
Дата сообщения: 18.08.2016 14:36
chatt По какому критерию собираетесь узнавать про новые и переименованные файлы без синхронизации?
Автор: chatt
Дата сообщения: 18.08.2016 14:40
по полному имени файла.
вывести литинг всех файлов, имеющихся сейчас на сервере.
а потом, когда нужно проверить обновления, вывести новый листинг, вывести разницу между ними и рекурсивно скачать файлы, соответствующие несовпашим строкам.
Автор: vlary
Дата сообщения: 18.08.2016 14:43
chatt
Цитата:
поэтому не зеркло мне нужно. А только лишь обновления
То есть, если я правильно понял,
ты хочешь закачать с сервера файлы, которые новее, скажем, 01.01.2016,
а затем обновлять те, которые новее закачанных?
Тогда тебе нужно действительно что-то типа скрипта.
Качаешь полный листинг сервера, парсишь его,
выбираешь файлы новее этой даты, проверяешь наличие у себя файла
и дату его создания, если нету или более старый, качаешь.
Собственно, сбацать что-то такое на Перле или Питоне не сложно.

Автор: ipmanyak
Дата сообщения: 18.08.2016 14:52
chatt При наличия подкаталогов и работе с текстовым листингом задача не простая для программирования, не говоря уже о батниках. Несовпавшие строки - не проканает. Строка с новым файлом может оказаться в середине списка, потому надо брать каждую строку списка и искать ее в другом, причем не строку списка, а имя файла с его путями-подкаталогами, жопа еще та ! ftp твой или чужой? Обычно на FTP для заливки юзают конкретную папку , типа \pub\upload
из нее перекладывают в другие, которые READ ONLY, а папку upload очищают. В таком режиме работы - проще все делать.
Автор: chatt
Дата сообщения: 19.08.2016 15:11

Цитата:
ftp твой или чужой? Обычно на FTP для заливки юзают конкретную папку

В том-то и дело, что чужой. Файлы могут появиться где угодно.

Цитата:
Несовпавшие строки - не проканает. Строка с новым файлом может оказаться в середине списка, потому надо брать каждую строку списка и искать ее в другом, причем не строку списка, а имя файла с его путями-подкаталогами

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


Цитата:
ты хочешь закачать с сервера файлы, которые новее, скажем, 01.01.2016,
а затем обновлять те, которые новее закачанных?

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

Цитата:
Собственно, сбацать что-то такое на Перле или Питоне не сложно.

Был бы очень рад помощи, т.к. я не программист. А вещь наверняка будет востребованная.
Автор: chatt
Дата сообщения: 02.09.2016 13:36
Есть скрипты для ubuntu, основанные на curlftpfs

Помогите сделать похожее под Windows в виде экзешника или батника
Есть ли аналоги curlftpfs?
Автор: chatt
Дата сообщения: 15.09.2016 00:09
Вот код под убунту. Сделайте, пожалуйста похожий батник под винду.

Код: #!/bin/bash
# $1 для ввода пути считывания, например для теста.
NAME1="actual_list.txt"
# проверка установленного пакета для монтирования ftp
cmd=$(dpkg --status "curlftpfs" 2>/dev/null | grep "ok installed")
if [ $? == 0 ]
    then 2>/dev/null
    else echo " Необходимый пакет curlftpfs не установлен,
пожалуйста установите его вручную командой:
sudo apt-get install curlftpfs "
        exit 0
    fi

# проверка наличия "старого" файла и директории монтирования
if test ! -f "old_list.txt"
then echo -n "Похоже, это первый запуск. Пробуем скачать список файлов [Y/n] ?"
    read item
        case "$item" in
     y|Y) echo "Приступаем. При необходимости для монтирования будет создана директория mnt_ftp "
;;
    n|N) echo "Отказ пользователя, выход."
exit 0
;;
     #"Ничего не ввели. Выполняем действие по умолчанию..."     
     *) echo "Приступаем. При необходимости для монтирования будет создана директория mnt_ftp "
;;
        esac    
    NAME1="old_list.txt" # при первом запуске заполняем этот файл
fi


    # проверка директории для монтирования
    if test ! -w "mnt_ftp"
        then mkdir mnt_ftp
    #    else echo "Директория для монтирования уже существует!"
    fi

# соединяемся
curlftpfs -r ftp://login:password@hostname/ mnt_ftp -o,gid=1000,uid=1000,umask=002 2>/dev/null &&
# пишем во временный файл
find "mnt_ftp/$1" > tmp_file &&
# отмотируем
    sleep 5s
    cmd=$(fusermount -u mnt_ftp)
# меняем кодировку
    iconv -f cp1251 -t utf8 tmp_file > $NAME1
    rm tmp_file
echo "Список файлов можно посмотреть в файле $NAME1"

# если первый запуск то проверка не нужна, естественно при первом запуске "actual_list.txt" нет, не будет и проверки
if test -f "actual_list.txt"
then DIFF=$(diff -q "old_list.txt" $NAME1)
    if [ "$DIFF" != "" ]
    then echo "Есть изменения"
    diff "old_list.txt" $NAME1 > diff_list.txt
    cat diff_list.txt
    echo "Эти сведения сохранены в файле diff_list.txt"
        
        echo -n "Если вы уверены что это не сбой чтения, то заменим эталонный файл [Y/n] ?"
        read item
        case "$item" in
         y|Y) echo "Файл заменен"
    ;;
        n|N) echo "Отказ пользователя, выход."
    exit 0
    ;;
         *) echo "Файл заменен "
    ;;
        esac    
        mv actual_list.txt old_list.txt    
    
             echo -n "Хотите сейчас запустить копирование новых файлов? [Y/n] ?"
             read item
             case "$item" in
             y|Y) echo "Файл(ы) будут скопированы в каталог new_files"
             ;;
             n|N) echo "Отказ пользователя, выход."
             exit 0
             ;;
             *) echo "Файл(ы) будут скопированы в каталог new_files"
             ;;
             esac    
             exec ./copy_file.sh    
    
    else echo "Изменений нет"
    
    fi
fi

echo "Удачного времени суток!"
exit 0

Страницы: 1

Предыдущая тема: Розыск монитора обращений к жесткому диску


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.