Назад | Перейти на главную страницу

Почему мой выходной файл FTP пуст?

Из командной строки Windows у меня есть FTPd на веб-сервер Windows. Я могу get файл, и я вижу список каталогов с dir, но я хочу сохранить этот список локально.

Я попытался dir > c:\somefile.txt, и файл создан, но он пустой. То же самое, если я сделаю ls > c:\somefile.txt.

Результат такой же, когда я использую FTP из Linux.

FTP отправляет обратно следующее:

200 PORT command successful
150 Opening ASCII mode data connection for /bin/ls
226 Transfer complete

Вероятно, это связано с тем, что FTP.exe берет на себя управление оболочкой. Таким образом, перенаправления, обрабатываемые cmd.exe, не действуют.

Что вы можете сделать, так это использовать параметр -s: filename и перенаправить весь вывод ftp в файл. Он будет содержать больше, чем вы хотите, но вы можете позаботиться об этом позже.

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

Ответ Игала Сербана правильный. Попробуй это,

ftp -s:ftp.txt > ftp.log 2>&1

где ftp.txt это скрипт, просто список команд, например,

help
pwd
quit

ftp.log захватит вывод. Добавление 2>&1 означает, что вы захватываете оба стандартный выход (нормальный выход) и стандартная ошибка (любые сообщения об ошибках от ftp.exe).

Вы можете поместить список каталогов в локальный файл, выполнив:

dir [remote-directory] [local-file]

В вашем случае команда будет

dir . c:\somefile.txt

Он не отвечает на вопрос «почему», но выполняет то, что вы пытаетесь сделать.

Самый простой способ - открыть папку «Компьютер», в которой вы видите все свои диски. Здесь вам нужно создать ярлык для ftp-сервера. Для этого на пустом месте в папке компьютера щелкните правой кнопкой мыши и выберите «Добавить сетевое расположение», щелкните по нему и следуйте подсказкам, чтобы создать ярлык для сетевого ftp-сервера. Если у вас есть пароль или он анонимен, сделайте это. Вы тоже можете дать ему имя. Он появится в папке «Сеть» в папке «Компьютер». Теперь дважды щелкните по нему. Чтобы открыть> просмотреть, прочитать или воспроизвести и отредактировать папку или ее файл, вам нужно перетащить> скопировать или переместить его на рабочий стол. Вы можете переместить его обратно, когда закончите. Это немного громоздко, но у меня работает. Надеюсь, это поможет вам, ребята!

Дополнение к ответу Мартина Бёгелунда:

Вопрос «почему» (который, как я предполагаю, звучит как «почему первоначальная попытка сделала то, что она сделала») интересен и прост, если подумать правильно: это то же самое dir [remote-directory] [local-file] синтаксис, где находится удаленный каталог >. Клиент ftp - это не оболочка. Введенные в него команды не являются командами оболочки. У него нет операторов перенаправления, и > не особый персонаж.

Да ты жестяная банка иметь каталог с именем > на вашем FTP-сервере, если вы не используете его в Windows.

В ftp.exe найденный в Windows, является копией раннего ftp BSD. Он не знает об ограничениях имени файла Windows. Если вы скажете это get remotefile > он попытается сохранить копию удаленного файла как локальный файл с именем >, и завершится ошибкой из-за ограничений локальной файловой системы.

Основной причиной путаницы здесь является то, что FTP-сервер, получающий LIST команда с > в качестве аргумента ответила кодом успеха и пустым телом ответа вместо сообщения «Нет такого файла».

Это на самом деле не отвечает на вопрос, но думали ли вы о написании скрипта для этого, а затем перенаправлении вывода скрипта?

http://support.microsoft.com/kb/96269

вероятно, процесс ftp-сервера не имеет права писать в c :. Попробуйте вместо этого c: \ somedir \ somefile.txt

#!/bin/bash -vx
ftp -in bahugunazxc.com>>END_SCRIPT
quote USER bipin
quote PASS acs123
bin
prompt off
cd wbc/webr >>>
ls
END_SCRIPT

Сохраните этот файл. например, я сохранил его под именем dp.sh. После этого запустите команду:

./dp.sh > ftp.log