@ideological

Как быстро скачать большое количество мелких изображений на сервер debian?

Привет,

есть удаленный VPS с Debian на борту. И нужно периодически качать большое число мелких картинок по их URL с переименованием, потом сжать. И проблема вроде фигня, но вопрос в скорости.

Какие есть варианты? Буду рад любым ссылкам.

Сначала думал использовать "wget -i pupkinlist.txt", но так нельзя указать конечное название каждого файла.

Сейчас делаю вероятно ламерским методом. Получаю на php список файлов и запускаю exec('wget.. потом exec(' convert.. так несколько php cli экземпляров (надеясь что они параллельно работают и друг другу не мешают)..
Собственно очень хочу узнать вариант лучше?

(плюс есть смежная задача в том же русле - массовая проверка на существование файлов в папке, типа file_exists).

Может как-то нужно объединить множество exec в один с кучей аргументов? Как правильно это сделать и ускорит ли это процесс? Чувствую? что нужно использовать консольные команды, но как правильно их паралелить и следить чтобы их было не слишком много пока не знаю.
Что посоветуете?
  • Вопрос задан
  • 299 просмотров
Пригласить эксперта
Ответы на вопрос 7
doublench21
@doublench21
$ awk '{ ext=gensub(/.*(\.[^.]*$)/,"\\1",1);
         print "wget " $2 " -O " $1 ext}' images.txt

wget image.jpg -O some_id1.jpg
wget image2.jpg -O some_id2.jpg
wget image3.jpg -O some_id3.jpg
Ответ написан
Комментировать
vman
@vman
Если вы уже используете PHP, то, я бы попробовал сделать так:

1) читаем пачку URL из списка (10,20... )
2) через php.net/manual/ru/function.curl-multi-init.php инициалиируем и запускаем потоки
3) ждем пока все потоки завершат работу
4) переименовываем файлы
5) сжимаем их
6) повторяем п.1
Ответ написан
Комментировать
@Xilian
Программист 1С, сетевые технологии, SQL
Запаковать в tar с нулевым сжатием. Потом разжать. Накладные расходы будут + 2-3%
Ответ написан
ky0
@ky0
Миллиардер, филантроп, патологический лгун
Кладёте в файл или подсовываете напрямую список урлов и делаете что-нибудь типа:
сat img_links | xargs -n 1 -P 5 wget {}
Где P - количество потоков wget`а.

Можно добавить какую-нибудь переменную, которая бы нужным вам образом именовала файлы (параметр -O wget`а).

P.S. - проверить существование файла по ссылке можно конструкцией вроде:
if [[ `wget -S --spider http://link_to_image.jpg  2>&1 | grep 'HTTP/1.1 200 OK'` ]]; then
...
Ответ написан
Комментировать
edli007
@edli007
full stack, team lead
я конечно веб разраб а не админ, потому и совет будет относительно веб, но я бы юзал сокеты и передавал одним стримом сразу пачку.
Ответ написан
Комментировать
shambler81
@shambler81 Куратор тега Linux
да ваще изи, говори весь алгоритм подробно, че качаем есть ли доступ, че за файл? обновляется? и тд и тп.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы