2

Как я могу скачать последний файл, доступный на FTP-сервере, используя wget. Если я использую приведенную ниже команду, она дает все файлы.

wget ftp://id: пароль @ ftpserver/dir/ *

С уважением, Рам.

5 ответов5

6

Просто добавьте опцию "-N" в wget, чтобы игнорировать файлы старше, чем у вас локально. Вы также можете добавить «-nc», чтобы полностью пропустить файл, если он уже существует, даже если файл на FTP новее.

wget -N ftp://id: пароль @ ftpserver/dir/ *

5

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

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

1

Мое решение таково:

curl 'ftp://server.de/dir/'$(curl 'ftp://server.de/dir/' 2>/dev/null | tail -1 | awk '{print $(NF)}')
1

Попробуйте указать файл, который вы хотите скачать. Использование '*' загрузит каждый файл в каталоге 'dir'.

Пример:

wget ftp://gnjilux.cc.fer.hr/welcome.msg

... скачает именно файл 'welcome.msg' с указанного сервера.

Проверьте Wget-руководство.

Обновление: я не уверен, что у меня возникла проблема. Вы пытаетесь синхронизировать содержимое удаленного сервера (компьютера, на котором работает демон FTP) с вашим локальным сервером? Вы ищете что-то вроде функциональности rsync по FTP? Если да, вы можете попробовать ftpsync (один wget в этом случае не поможет).

0

Может быть, мое неидеальное, но простое решение кому-нибудь пригодится.

Сначала я установил proftpd. Вот пример дерева каталогов /ftp:

/ftp/
/ftp/file1
/ftp/file1/subfile1
/ftp/file1/subfile2
/ftp/file2

Затем я добавил задачу в crontab, чтобы каждую минуту выполнять этот скрипт:

PACKAGES=$(find /ftp/* -type d -not -name 'lost+found')
for PACKAGE in "${PACKAGES[@]}"; do
  echo $(ls -I 'latest' -Atp "${PACKAGE}" | grep -v '/' | head -n 1) > "${PACKAGE}"/latest
done

Поэтому для каждого файла (или пакета в моем случае) вам нужно создать отдельный каталог, и в нем будет файл 'latest', содержащий имя самого последнего файла в этом каталоге. Если вы хотите получить последнюю версию какого-либо файла, вы можете просто выполнить команду:

wget ftp://"${FTP_SRV}"/"${FILE}"/$(curl -s ftp://"${FTP_SRV}"/"${FILE}"/latest)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .