Linux wget file list

Download files from a list

How can I download files (that are listed in a text file) using wget or some other automatic way? Sample file list:

www.example.com/1.pdf www.example.com/2.pdf www.example.com/3.pdf 

8 Answers 8

wget has a built-in flag for this: wget -i your_list , where your_list is a file containing URL’s delimited by linebreaks. You can find this kind of thing by reading man wget

Get them in parallel with

cat urlfile | parallel --gnu "wget <>" 

By default it will run as many processes as you have cores, you can probably ramp this up another 10x if you really want to pull them down quickly by adding «-j 20» after parallel.

I for one just can’t get it to work. I don’t see any proc spawned, switching echo for wget doesn’t output anything

Note with the ‘it will run as many processes as you have cores’ — network bandwidth is likely going to be more of a limiting factor.

It really depends. For a large number of small files this can be almost an order of magnitude faster, as most of the transfer time is the handshake/TCP round trip’s. Also in the situation where you are downloading from a number of smaller hosts, sometime the per connection bandwidth is limited, so this will bump things up.

This is pretty useful if you want to use a list of relative URLs (resource ID without hostnames) with different hostnames, example: cat urlfile | parallel —gnu «wget example1.com<>» and cat urlfile | parallel —gnu «wget example2.com<>«

One might add that flooding a website for a massive amount of parallel requests for large files is not particularly nice. Doesn’t matter for big sites, but if it’s just a smaller one you should take care.

Источник

wget to get list of files

I am using wget in a bash script to get a list of files from a website, the files are sequential and in the format http://example.com/00001.csv etc. Is there a way to terminate/end the script when I hit the last file? This is the script I have so far.

#!/bin/bash url="example.com"; for a in do wget -nc -q $$a.csv done 

its going to be run on a cronjob so ideally it needs to terminate when it gets the first http 404 rather than iterating from 1 to 18923230 each time it runs (every 2 hours)

Читайте также:  Kali linux 686 pae

2 Answers 2

The simplest way would be to check if the file exists. Using your current script:

#!/bin/bash url="example.com"; for a in do wget -nc -q $$a.csv || exit; done 

That will exit as soon as one of the files is not downloadable. Alternatively, assuming there is an index.html file that links to these, you could download that and grep for the file names.

wget appears to return 0 when successful and non-zero otherwise, so:

 wget blahblah if [[ $? -ne "0" ]]; then break; fi 

You must log in to answer this question.

Linked

Hot Network Questions

Subscribe to RSS

To subscribe to this RSS feed, copy and paste this URL into your RSS reader.

Site design / logo © 2023 Stack Exchange Inc; user contributions licensed under CC BY-SA . rev 2023.7.17.43537

Linux is a registered trademark of Linus Torvalds. UNIX is a registered trademark of The Open Group.
This site is not affiliated with Linus Torvalds or The Open Group in any way.

By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.

Источник

wget — only getting .listing file in every sub-dir

I will get the .listing file of that directory. But I have to step through each subsequent sub-directories to get the whole structure. Is there a way to get the .listing file from all (sub)directories with one command? Also, I have noticed that the file index.html is automatically generated after every access. Is there a way to suppress this behavior? The thing is that I always found Bash processing slow, but after some profiling I found that the largest delay is in getting each .listing file from subsequent sub-directories. Example: checking for specific file extensions in the GNU tree takes about 320 seconds of which 290 seconds are for processing the above wget command.

2 Answers 2

If you are looking to build an index of a FTP site, that is, to list all of the subdirectories and files on the site without actually retrieving them, you can do this:

wget -r -x --no-remove-listing --spider ftp://ftp.example.com/ 
  • -r => recursive (i.e, visit subdirectories)
  • -x => force mirror subdirectories to be created on client
  • —no-remove-listing => leave «.listing» files in each subdirectory
  • —spider => visit but do not retrieve files

This will create a sparse directory tree of identical structure on the client as the server, containing only «.listing» files showing the contents (the result of «ls -l») for each directory. If you want to digest that into a single list of path-qualified file names (like you would get from «find . -type f»), then do this at the root of that sparse directory tree:

find . -type f -exec dos2unix <> \; ( find . -maxdepth 999 -name .listing -exec \ awk '$1 !~ /^d/ ' \ <> \; 2>/dev/null ) | sort -k4 

which will give you output like

2000-09-27 00:00:00 261149 ./README 2000-08-31 00:00:00 727040 ./foo.txt 2000-10-02 00:00:00 1031115 ./subdir/bar.txt 2000-11-02 00:00:00 1440830 ./anotherdir/blat.txt 

NB: the «-maxdepth 999» option is not necessary in this use case, I left it in the invocation that I was testing that had an additional constraint: to limit the depth of the tree that was reported. For example, if you scan a site that contains full source trees for several projects, like

./foo/Makefile ./foo/src/. ./foo/test/. ./bar/Makefile ./bar/src/. ./bar/test/. 

then you might only want an outline of the projects and top level directories. In this case, you would give an option like «-maxdepth 2».

Читайте также:  Missing operating system linux

One serious issue with this solution is that ‘—spider’ causes wget to TRANSFER every file but not write any data to disk. This means you will be effectively downloading the entire contents of the FTP server. This can potentially have unwanted consequences such as (but not only): incurring ISP ingress traffic overage fees, disruption to other IP services like VoIP/IPTV/VoD while you saturate your WAN link with unneeded FTP data transfers, and may prompt FTP (with no-mirror / request-to-mirror policy) server’s admin to deny access from your public IP as to them it appears the same as someone recursively downloading the entire site. That said, since we only want to get directory index, replacing «—spider» with a simple REGEX accept option «-A ‘.listing'» is a better choice as it causes wget to refuse downloading any data from the server except for «.listing» file(s).

P.S. @Codex24 — your oneliner to parse / report — nice work!

This does not provide an answer to the question. Once you have sufficient reputation you will be able to comment on any post; instead, provide answers that don’t require clarification from the asker. — From Review

Источник

Использование команды Wget на простых примерах

Команда wget

Утилита wget (или команда wget) предназначена для скачивания файлов, веб страниц и других ресурсов из интернета. Рассмотрим основные возможности команды wget на примерах.

Синтаксис команды wget

Команда wget имеет следующий синтаксис:

В простейшем случае, чтобы скачать файл, достаточно указать URL-адрес:

wget https://domain.ru/filename.tar.bz2

Выполнив данную команду, вы скачаете файл filename.tar.bz2 , расположенный по адресу https://domain.ru/filename.tar.bz2, который будет сохранен в текущую директорию.

Указание нового имени файла

Используя опцию -O можно задать название результирующего файла.

Например, если файл, который вы скачиваете, имеет имя filename-1.3.0-release-branch.tar , вы можете сохранить его с именем filename.tar :

wget -O filename.tar ftp://some.host.com/filename-1.3.0-release-branch.tar

Скачивание в фоновом режиме

Чтобы скачать файл в фоновом режиме используется опция -b :

wget -b http://host.com/file.zip

Скачивание нескольких файлов (по списку)

Команде wget можно передать текстовый файл, в котором на каждой строчке записаны URL-адреса, которые требуется скачать. Для этого используется опция -i :

Читайте также:  Linux parted увеличить диск

Скачивание файлов по ссылкам в HTML-документе

Команда wget поддерживает скачивание файлов по ссылкам в HTML-документе. То есть она автоматически находит все ссылки в HTML-файле и скачивает их:

wget --force-html -i file.html

Ограничение скорости скачивания

Чтобы ограничить скорость скачивания используется опция —limit-rate .

wget --limit-rate=500k http://some-site.com/filename.tar.gz

В качестве значения —limit-rate можно указывать скорость загрузки в следующих форматах:

  • байтах в секунду — например: 300
  • килобайтах в секунду — например: 10k
  • мегабайтах в секунду- например: 10.5m

Продолжение загрузки

Чтобы продолжить прервавшуюся загрузку используется опция -c :

wget -c http://some-site.com/file.tar

Проверка существования файла

Перед тем, как скачать файл, можно проверить существует ли он. Например, это может потребоваться, когда вы скачиваете большое количество файлов и хотите заранее знать, все ли из них доступны. Для проверки доступности файлов используется опция —spider .

Например, чтобы проверить доступность файлов в списке можно использовать команду:

wget --spider -i list-of-files.txt

Также можно проверить доступен ли конкретный файл:

wget --spider http://site.com/filename.zip

При использовании опции —spider файлы не скачиваются, а только выполняется проверка.

Как скачать сайт

Инструкцию по скачиванию сайтов с помощью wget смотрите в отдельной статье: Скачиваем сайты целиком — утилита wget

Скачивание с FTP (указание логина и пароля)

Чтобы скачать файл с FTP-сервера, для которого требуется указание логина и пароля, используются опции —ftp-user и —ftp-password :

wget --ftp-user=ИМЯ_ПОЛЬЗОВАТЕЛЯ --ftp-password=ПАРОЛЬ ftp://ftp.адрес.com/filename.tar

Скачивание с HTTP с указанием логина и пароля

Если для доступа к ресурсу по HTTP требуется указание имени пользователя и пароля, то для этого используются опции —http-user и —http-password :

wget --http-user=ИМЯ_ПОЛЬЗОВАТЕЛЯ --http-password=ПАРОЛЬ http://ftp.адрес.com/filename.tar

Указание количества попыток

Если соединение нестабильное, то можно задать количество попыток, чтобы загрузка файла продолжалась в случае сбоя. Для указания количества попыток используется опция -t :

wget -t 10 http://site.com/filename.zip

По умолчанию установлено количество попыток — 20. Но если при попытке загрузки файла получена ошибка 404 (файл не найден) или connection refused, то скачивание прерывается.

Ожидание между загрузкой файлов

При скачивании большого количества файлов, слишком частое обращение к удаленному серверу с вашей стороны может расцениваться сервером как DDoS атака. Опция -w позволяет задать количество секунд, которое требуется ожидать перед загрузкой очередного файла.

Некоторые веб-сайты умеют распознавать автоматические запросы к сайту, которые происходят с заданной периодичностью. Поэтому даже использование опции -w не всегда помогает. В таких случаях можно воспользоваться дополнительной опцией —random-wait . При ее использовании ожидание перед загрузкой очередного файла составляет случайное количество секунд от 0.5*wait до 1.5*wait. Пример использования (ожидание будет в диапазоне от 15 до 45 секунд):

Указание нескольких опций

В примерах выше мы использовали опции по отдельности. Можно использовать несколько опций в одной команде одновременно, например:

wget -w 50 --random-wait -t 15 --limit-rate=5m http://site.com/file.zip

Заключение

Мы рассмотрели только базовые возможности команды wget по скачиванию файлов. Полный список всех опций и их описание можно получить, выполнив в командной строке:

Источник

Оцените статью
Adblock
detector