LINUX.ORG.RU

wget download with ftp**

 , ,


0

1

Уважаемые админы помогите решить задачу есть ftp сервер на который выкладывают раз в сутки новый файл, всего в каталоге несколько файлов имеющих похожее название 20190519-хххх-хх 20190520-хххх-хх 20190521-хххх-хх и необходимо автоматически качать каждый день самый свежий файл 20190521-хххх-хх, только один файл, а не весь каталог в сетевое размещение. wget*ом можно это реализовать? как примерно должен выглядеть скрипт выполняющий данное действо?

Нет, только wget не достаточно

Пиши скрипт, получающий список файлов, выбирай нужный и скачивай конкретно его.

И почему именно wget? Для работы с ftp, есть более подходящие инструменты, например lftp

futurama ★★★★★
()

как примерно должен выглядеть скрипт выполняющий данное действо?

Получаешь листинг, вырезаешь последний файл, скачиваешь.

Deleted
()
Ответ на: комментарий от Deleted

Вообще перлом проще всего это сделать. 1. Получаешь листинг через ftp модуль (можно и wget) 2. Вычисляешь самую новую дату. 3. Скачиваешь.

Можно еще rsync использовать, он один раз все синхронизирует, а потом будет только самые последние файлы подкачивать.

da17
()
Ответ на: комментарий от da17

Тупой однострочник типа wget $FTPDIR/$(curl -l $FTPDIR |tail -n1) будет работать. Но rsync правильнее.

Deleted
()

Если только wget'ом, то что-то вроде

wget ftp://user:passwd@host.example.com/pub/"$(date '+%Y%m%d')*"

А по уму надо как уже советовали получать индекс, находить самый новый файл по дате и скачивать его

Ну или если есть доступ к серверу то добавить создание симлинка «latest» каждый раз когда выкладывается новый файл

alx777 ★★
()
Ответ на: комментарий от alx777

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

currDate=`date +%G%m%d`
currDate=`date +%G%m%d -d "8 days ago"`
ftpHost=ftp.esklp.rosminzdrav.ru
ftpUser=esklp_xls
ftpPass=bUUZSZ6e
localDir=/home/day
trashDir=$localDir/trash
wget --no-remove-listing -P $trashDir ftp://$ftpUser:$ftpPass@$ftpHost/
fileName=`awk '{print $9}' $trashDir/.listing | grep $currDate`
fileName=${fileName::-1}
wget -P $localDir ftp://$ftpUser:$ftpPass@$ftpHost/$fileName
rm -R $trashDir

exit 0

ini_any
() автор топика
Ответ на: комментарий от ini_any

Попробуй добавить в начале скрипта

#!/bin/bash
# make sure we are using bash and print every command before execution
set -x

Не уверен что string manipulation operations вроде ${fileName::-1} поддерживаются в любом sh

А то к примеру в Убунте по умолчанию

$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Mar 29 14:02 /bin/sh -> dash

alx777 ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.