Из командной строки 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
команда с >
в качестве аргумента ответила кодом успеха и пустым телом ответа вместо сообщения «Нет такого файла».
Это на самом деле не отвечает на вопрос, но думали ли вы о написании скрипта для этого, а затем перенаправлении вывода скрипта?
вероятно, процесс 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