Как я могу скачать последний файл, доступный на FTP-сервере, используя wget. Если я использую приведенную ниже команду, она дает все файлы.
wget ftp://id: пароль @ ftpserver/dir/ *
С уважением, Рам.
Как я могу скачать последний файл, доступный на FTP-сервере, используя wget. Если я использую приведенную ниже команду, она дает все файлы.
wget ftp://id: пароль @ ftpserver/dir/ *
С уважением, Рам.
Просто добавьте опцию "-N" в wget, чтобы игнорировать файлы старше, чем у вас локально. Вы также можете добавить «-nc», чтобы полностью пропустить файл, если он уже существует, даже если файл на FTP новее.
wget -N ftp://id: пароль @ ftpserver/dir/ *
Ответ в том, что вы, вероятно, не можете сделать это, используя только wget или любой другой инструмент, который мне известен.
Вероятно, вам нужно написать скрипт, который будет использовать wget/curl/ что угодно, что будет запрашивать список каталогов с ftp-сервера. Затем скрипт выберет и получит нужный файл на основе имени файла или некоторых других критериев.
Мое решение таково:
curl 'ftp://server.de/dir/'$(curl 'ftp://server.de/dir/' 2>/dev/null | tail -1 | awk '{print $(NF)}')
Попробуйте указать файл, который вы хотите скачать. Использование '*' загрузит каждый файл в каталоге 'dir'.
Пример:
wget ftp://gnjilux.cc.fer.hr/welcome.msg
... скачает именно файл 'welcome.msg' с указанного сервера.
Проверьте Wget-руководство.
Обновление: я не уверен, что у меня возникла проблема. Вы пытаетесь синхронизировать содержимое удаленного сервера (компьютера, на котором работает демон FTP) с вашим локальным сервером? Вы ищете что-то вроде функциональности rsync по FTP? Если да, вы можете попробовать ftpsync (один wget в этом случае не поможет).
Может быть, мое неидеальное, но простое решение кому-нибудь пригодится.
Сначала я установил 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)