Перейти к содержанию

Автоматическая передача файлов на FTP сервер


Рекомендуемые сообщения

pm, что то не то получается, после запуска бат файла открывается CMD окно, в нем типа процесс авторизации, заканчивается это так , дословно...

ну вот, меня занятого пожилого человека заставляют проверять :smile:

у меня всё работает. ты где-то ошибся в командном файле, с кем не бывает...

 

А в папке локального пути создается файл ftp.dat c таким содержимым, логин, пароль, локальный путь, соответственно то что было прописано в бат файле

user логин
пароль
bin
cd /локальный путь/
put 
quit

откуда взялась команда "cd /локальный путь/" среди ftp-команд? "cd /локальный путь/" ранее подразумевала команду ОС и не имеющую отношения к ftp, смешивать их нельзя, ибо результат будет неадекватным. во временном файле должны быть только ftp-команды

 

Да, забыл упомянуть, запускается это на машине с Win7, и если просто запустить бат файл, как раз все и происходит как описано, а если запустить от имени администратора, то файл в локальной папке не создается.

На фтп в обоих случаях ничего не происходит.

у меня всё работает, проверил под админом на WinXP. привожу пример своего рабочего файла, я там несколько файликов копирую с локальной машины и раскладываю на своём ftp-сервере по директориям. логин и пароль, вестимо заменены на показушные. логи своего ftp-сервера ещё смотри, по ходу работы.

@echo off
cd /temp
echo user myusername> _ftp.tmp
echo mypassword>> _ftp.tmp
echo bin>> _ftp.tmp
echo cd /upload/>> _ftp.tmp
echo put zfs_last_rus.pdf>> _ftp.tmp
echo put 74HC_HCT14.pdf datasheet/74HC_HCT14.pdf>> _ftp.tmp
echo put "HP 53131A. Operating Guide.pdf" "doc/HP 53131A. Operating Guide.pdf">> _ftp.tmp
echo cd iso/>> _ftp.tmp
echo put /temp/Vyatta/vyatta-livecd_VC6.3-2011.07.21_i386.iso>> _ftp.tmp
echo quit>> _ftp.tmp
ftp -n -s:_ftp.tmp 172.31.254.1
del _ftp.tmp

 

вот результат работы bat-файла в окне команд, всё удачно:

C:\>ftpcmd.bat
Connected to 172.31.254.1.
220 FTP server ready.
ftp> user myusername
331 Password required for myusername.

230 User myusername logged in, access restrictions apply.
ftp> bin
200 Type set to I.
ftp> cd /upload/
250 CWD command successful.
ftp> put zfs_last_rus.pdf
200 PORT command successful.
150 Opening BINARY mode data connection for 'zfs_last_rus.pdf'.
226 Transfer complete.
ftp: 825970 bytes sent in 0.02Seconds 51623.13Kbytes/sec.
ftp> put 74HC_HCT14.pdf datasheet/74HC_HCT14.pdf
200 PORT command successful.
150 Opening BINARY mode data connection for 'datasheet/74HC_HCT14.pdf'.
226 Transfer complete.
ftp: 184142 bytes sent in 0.00Seconds 184142000.00Kbytes/sec.
ftp> put "HP 53131A. Operating Guide.pdf" "doc/HP 53131A. Operating Guide.pdf"
200 PORT command successful.
150 Opening BINARY mode data connection for 'doc/HP 53131A. Operating Guide.pdf'.
226 Transfer complete.
ftp: 2435872 bytes sent in 0.02Seconds 152242.00Kbytes/sec.
ftp> cd iso/
250 CWD command successful.
ftp> put /temp/Vyatta/vyatta-livecd_VC6.3-2011.07.21_i386.iso
200 PORT command successful.
150 Opening BINARY mode data connection for 'vyatta-livecd_VC6.3-2011.07.21_i386.iso'.
226 Transfer complete.
ftp: 203423744 bytes sent in 2.69Seconds 75678.48Kbytes/sec.
ftp> quit
221 Goodbye.

C:\temp>

директории на ftp-сервере, естественно, создал заранее, но можно и ftp-командами настругать. всё понятно или что-то объяснить? я специально усложнил пример, так будет чуть нагляднее, как можно делать.

если захочется удобства и красивостей, то надо будет имена копируемых/удаляемых на ftp-сервере файлов передавать параметрами в командный файл. там же сделать проверку по времени создания или каким-то другим атрибутам.

и не надо ставить дополнительные костыли, если можно обойтись штатными средствами ОС, логично?

 

Добавлено после раздумий:

и ещё вдогонку кусок лога ftp-сервера, где видно, что и куда легло на сервере:

Oct 21 13:46:17 box ftpd[11493]: connection from xxx.xxx.xxx (172.31.x.x)
Oct 21 13:46:17 box ftpd[11493]: FTP LOGIN FROM xxx.xxx.xxx as myusername
Oct 21 13:46:17 box ftpd[11493]: session root changed to /home/myusername
Oct 21 13:46:17 box ftpd[11493]: put zfs_last_rus.pdf = 825970 bytes (wd: /upload; chrooted)
Oct 21 13:46:17 box ftpd[11493]: put datasheet/74HC_HCT14.pdf = 184142 bytes (wd: /upload; chrooted)
Oct 21 13:46:17 box ftpd[11493]: put doc/HP 53131A. Operating Guide.pdf = 2435872 bytes (wd: /upload; chrooted)
Oct 21 13:46:20 box ftpd[11493]: put vyatta-livecd_VC6.3-2011.07.21_i386.iso = 203423744 bytes (wd: /upload/iso; chrooted)

Изменено пользователем pm
Ссылка на комментарий
Поделиться на другие сайты

Упс, смотрю рабочий пример и вижу, что передаются конкретные файлы, т.е. каждый файл по имени, а мне то нужно передавать все файлы из указанной папки, причем имена файлов и их количество заранее не известны. Из за этого у меня и не работало наверное, я же не указывал имена файлов, а есть вариант как обозначить все файлы в папке? Мне почему то кажется, что вариант типа *.* тут не подходит.

Ссылка на комментарий
Поделиться на другие сайты

Сергей, а почитать документацию, не? или пусть добрый дядя Паша из интернетов свои усталые мозги напрягает? :smile:

у меня всё работает. есть ftp-команды для работы с множеством файлов mget, mput, mdelete. вот вариант, кое-что поменял для красивости:

@echo off
echo user myusername> _ftp.tmp
echo mypassword>> _ftp.tmp
echo bin>> _ftp.tmp
echo lcd /temp/dump>> _ftp.tmp
echo cd /upload>> _ftp.tmp
echo mput *>> _ftp.tmp
echo quit>> _ftp.tmp
ftp -i -n -s:_ftp.tmp 172.31.254.1
del _ftp.tmp

важно: в строке вызова ftp добавлен ключ -i

 

вот что в окне интерпретатора команд:

C:\>ftpcmd.bat
Connected to 172.31.254.1.
220 FTP server ready.
ftp> user myusername
331 Password required for myusername.

230 User myusername logged in, access restrictions apply.
ftp> bin
200 Type set to I.
ftp> lcd /temp/dump
Local directory now C:\temp\dump.
ftp> cd /upload
250 CWD command successful.
ftp> mput *
200 PORT command successful.
150 Opening BINARY mode data connection for 'AD9856_Source.zip'.
226 Transfer complete.
ftp: 42784 bytes sent in 0.00Seconds 42784000.00Kbytes/sec.
200 PORT command successful.
150 Opening BINARY mode data connection for 'freebsd.kernel.panic.txt'.
226 Transfer complete.
ftp: 66 bytes sent in 0.00Seconds 66000.00Kbytes/sec.
200 PORT command successful.
150 Opening BINARY mode data connection for 'HP 53131A. Operating Guide.pdf'.
226 Transfer complete.
ftp: 2435872 bytes sent in 0.03Seconds 78576.52Kbytes/sec.
200 PORT command successful.
150 Opening BINARY mode data connection for 'irfpf40.pdf'.
226 Transfer complete.
ftp: 180788 bytes sent in 0.00Seconds 180788000.00Kbytes/sec.
200 PORT command successful.
150 Opening BINARY mode data connection for 'iSCSI.naming.txt'.
226 Transfer complete.
ftp: 1513 bytes sent in 0.00Seconds 1513000.00Kbytes/sec.
200 PORT command successful.
150 Opening BINARY mode data connection for 'lpf2.exe'.
226 Transfer complete.
ftp: 283136 bytes sent in 0.00Seconds 283136000.00Kbytes/sec.
200 PORT command successful.
150 Opening BINARY mode data connection for 'PATRIOT_14.jpg'.
226 Transfer complete.
ftp: 188734 bytes sent in 0.00Seconds 188734000.00Kbytes/sec.
ftp> quit
221 Goodbye.

C:\>

как видишь, все 7 разных файлов скопировано на ftp-сервер. на чудовищные скорости передачи не обращай внимания

  • Я с тобой! 1
Ссылка на комментарий
Поделиться на другие сайты

Чтоб почитать, нужно еще найти то, что почитать, чтоб это найти надо знать как это называется, искал, что то находил, но все не то было, да и времени на все не хватает. Спасибо за помощь, постараюсь больше не напрягать.

Ссылка на комментарий
Поделиться на другие сайты

не обращай внимание на ворчание, это так, для проформы :smile:

можно войти в ftp-клиент без коннекта к серверу и сказать help, примитивная помощь и список команд там есть. а уж в гугле найти список команд ftp и их описание легко.

всегда рад помочь, вроде как некоторые проблемы помог победить.

пробуй предложенный вариант. по результатам отпиши, всё ли получилось. будет надо - ещё понапрягаю мозг

Изменено пользователем pm
Ссылка на комментарий
Поделиться на другие сайты

да, файл с командами ftp можно не генерировать и удалять каждый раз, а положить в укромное место и оттуда подсовывать ftp-клиенту в командной строке скриптом

Изменено пользователем pm
Ссылка на комментарий
Поделиться на другие сайты

...можно войти в ftp-клиент без коннекта к серверу и сказать help, примитивная помощь и список команд там есть. а уж в гугле найти список команд ftp и их описание легко.

В какой ftp-клиент? Как такового его нет, вручную обычно копировал через тоталкомандер, просмотрел сейчас к нему хелп, там собственно о том как работать в тоталкомандере. Отдельного FTP сервера в принципе тоже нет, это доступ на сайт через фтп.

Гугл... да найти там можно все, но тут ведь главное знать правильную формулировку вопроса, а если не знаешь... Вот для примера запрос "список команд фтп сервера" первая же ссылка

ABOR — Прервать передачу файла

CDUP — Сменить директорию на родительскую.

CWD — Сменить директорию.

DELE — Удалить файл (DELE file).

HELP — Выводит список команд принимаемых сервером.

LIST — Возвращает список файлов директории. Список передается через соединение данных (20 порт).

MDTM — Возвращает время модификации файла.

MKD — Создать директорию.

NLST — Возвращает список файлов директории в более кратком формате чем LIST. Список передается через соединение данных (20 порт).

NOOP — Пустая операция

PASV — Войти в пассивный режим. Сервер вернет адрес и порт к которому нужно подключиться чтобы забрать данные. Передача начнется при следующей команде RETR, LIST и тд.

PORT — Войти в активный режим. Например PORT 12,34,45,56,78,89. В отличие от пассивного режима для передачи данных сервер сам подключается к клиенту.

PWD — Возвращает текущую директорию.

QUIT — Отключиться

REIN — Реинициализировать подключение

REST — Устанавливает байт, с которого нужно продолжить скачивание или закачивание файла (REST 1234). После этой команды нужно использовать RETR или STOR.

RETR — Скачать файл. Перед RETR должна быть команда PASV или PORT.

RMD — Удалить директорию

RNFR и RNTO — Переименовать файл. RNFR — что переименовывать, RNTO — во что.

SIZE — Возвращает размер файла

STOR — Закачать файл. Перед STOR должна быть команда PASV или PORT.

APPE — Продолжить закачку файла с оборванного места.

SYST — Возвращает тип системы (UNIX, WIN, …)

TYPE — Установить тип передачи файла (Бинарный TYPE I, текстовый TYPE A)

и ни одной из этих команд не упоминается в примере, да очевидно я не то искал и не так, ну уж на что мозгов хватило...

А хватило только на чтобы найти тот пример что я выложил в начале и который в исходном виде не работал.

 

да, файл с командами ftp можно не генерировать и удалять каждый раз, а положить в укромное место и оттуда подсовывать ftp-клиенту в командной строке скриптом

Фтп клиент это имеется в виду тот что в системе? Ну я собственно изначально и хотел сделать бат файл и запускать из планировщика.

 

Последний приведенный пример работает так как надо, все копируется.

Хотя если честно, до конца я его так и не понял, нет по смыслу вроде понятно назначение каждой строчки, но это когда они уже вот, перед глазами, но самому правильно написать весь синтаксис, что то никак.

Ссылка на комментарий
Поделиться на другие сайты

В какой ftp-клиент? Как такового его нет, вручную обычно копировал через тоталкомандер, просмотрел сейчас к нему хелп, там собственно о том как работать в тоталкомандере. Отдельного FTP сервера в принципе тоже нет, это доступ на сайт через фтп.

системный ftp-клиент есть всегда. в командном интерпретаторе набери ftp и нажми <Enter>, дальше help для общего списка команд или help <команда> для конкретной. тоталкоммандер - костыль, он не нужен.

так не бывает: доступ по протоколу ftp есть, а сервера нет. подключись к нему, авторизуйся и посмотри его список команд.

 

Гугл... да найти там можно все, но тут ведь главное знать правильную формулировку вопроса, а если не знаешь... Вот для примера запрос "список команд фтп сервера" первая же ссылка

по возможности, не надо пользоваться статьями из педивикии, она изобилует ошибками и неточностями. следующая после педивикийных ссылок даёт адекватную информацию:

citforum.ru/internet/ftp_tut/com_a.shtml

 

Последний приведенный пример работает так как надо, все копируется.

надо понимать, твою задачу полностью решили? с косметическими изменениями сам управишься?

 

Хотя если честно, до конца я его так и не понял, нет по смыслу вроде понятно назначение каждой строчки, но это когда они уже вот, перед глазами, но самому правильно написать весь синтаксис, что то никак.

ткни пальцем, что не понятно и я объясню. будет опыт, будет и положительный результат

Ссылка на комментарий
Поделиться на другие сайты

Бывает так, что какая элементарная мелочь непонятна и хоть обчитайся, но без ее понимания толком ничего не поймешь, по крайне у меня так. Так вот в данном случае до меня только сейчас дошло, что вот всем этим

echo user myusername> _ftp.tmp
echo mypassword>> _ftp.tmp
echo bin>> _ftp.tmp
echo lcd /temp/dump>> _ftp.tmp
echo cd /upload>> _ftp.tmp
echo mput *>> _ftp.tmp
echo quit>> _ftp.tmp

мы создаем временный файл, а потом при запуске фтп клиента его используем, вот после осознания этого все встало на свои места.

Ссылка на комментарий
Поделиться на другие сайты

точно. и после отработки передачи файлов подтираем этот временный. если у тебя задача постоянно выполнять одно и тоже действие по передаче информации на сервер, файл с ftp командами можно оставить и тогда вся твоя задача выродится в одну строку "ftp -i -n -s:.......".

если в исходном командном файле будешь что-то менять, то обрати внимание, что первая команда echo перенаправляет вывод в файл с помощью операнда ">" а все последующие с ">>"

Изменено пользователем pm
Ссылка на комментарий
Поделиться на другие сайты

  • 1 год спустя...

Уважаемый Певел, прочитал вашу переписку с Сергеем и был приятно удивлен. Я думал, что таких людей как Вы уже не встречу в интернете. Хочу отдельно Вас поблагодарить.

А так же задать и свой вопрос.

----------------------------------------------------------

Суть таковая:

Есть на ПК диск (это сетевой диск, который при каждой загрузке автоматом подсоединяется системой). Ему назначена системная буква - "А". На этом диске лежит одна папка, и на этот же диск время-от-времени копируются файлы с разными названиями - SPO_*.zip По примеру, который тут был обсужден, у меня копируется только первый файл из всех. То-есть если файлов несколько, то копируется только первый (сверху).

 

 

Листинг bat файла вот таковой:

@echo off

echo user myusername> ftp.dat

echo mypassword>> ftp.dat

echo bin>> ftp.dat

echo cd /xml/>>ftp.dat

echo put a:\SPO_*.zip>> ftp.dat

echo quit>> ftp.dat

ftp -n -s:ftp.dat pegast.com.ua

del ftp.dat

 

Листинг ответа FTP:

Связь с pegast.com.ua.

220 ProFTPD 1.3.2c Server (Debian) [::ffff:83.229.211.211]

ftp> user myusername

331 Password required for myusername

 

230 User myusername logged in

ftp> bin

200 Type set to I

ftp> cd /xml/

550 /xml/: No such file or directory

ftp> put a:\SPO_*.zip

200 PORT command successful

150 Opening BINARY mode data connection for SPO_15863_354_49_26-10-2012_11-05-06

.zip

226 Transfer complete

ftp: 10289 байт отправлено за 0,00 (сек) со скоростью 10289000,00 (КБ/сек).

ftp> quit

221 Goodbye.

 

Очень беспокоит строчка: 550 /xml/: No such file or directory

Почему то он не находит директории, хотя копирует туда файл. И я проверил после скопировать туда же тот же файл, и убедился в том, что файл правильно скопирован.

И конечно же, интересует, как забирать все файлы с расширением zip.

Помимо этого, потом эти файлы, надо будет уже не копировать, а переносить в другую папку на этом же диске "А". Но это уже не так критично, хотя было бы здорово автоматизировать и этот процесс.

 

С нетерпением буду ждать Вашего ответа и рекомендаций.

Заранее, огромное спасибо.

post-14640-1351243906_thumb.jpg

Ссылка на комментарий
Поделиться на другие сайты

Уважаемый Певел, прочитал вашу переписку с Сергеем и был приятно удивлен. Я думал, что таких людей как Вы уже не встречу в интернете. Хочу отдельно Вас поблагодарить.

да, нас таких мало :smile:

эка, ветка годичной давности ожила и в форум я давно не заходил :smile:

 

у меня копируется только первый файл из всех. То-есть если файлов несколько, то копируется только первый (сверху).

в сообщении #15 этой ветки https://forum.datagor.ru/index.php?showtopi...ost&p=90639

я перечислил команды для работы с множеством файлов и пример скрипта дал, в частности, команда mput понадобится вместо put. ключ -i важен, иначе по каждой операции с файлом ftpшник будет ждать реакции пользователя с подтверждением или отказом.

 

Очень беспокоит строчка: 550 /xml/: No such file or directory

Почему то он не находит директории, хотя копирует туда файл. И я проверил после скопировать туда же тот же файл, и убедился в том, что файл правильно скопирован.

это директория на ftp сервере. надо проверить, что она находится в корне ftp сервера и у неё правильные права на доступ.

 

И конечно же, интересует, как забирать все файлы с расширением zip.

забирать или пересылать? будьте внимательны с направлением передачи. mget или mput соответственно. и ключ -i, чтобы автоматом, без подтверждений.

 

Помимо этого, потом эти файлы, надо будет уже не копировать, а переносить в другую папку на этом же диске "А". Но это уже не так критично, хотя было бы здорово автоматизировать и этот процесс.

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

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...