Pobierz pliki z listy

130

Jak mogę pobrać pliki (wymienione w pliku tekstowym) za pomocą wgetlub w inny automatyczny sposób?

Przykładowa lista plików:

www.example.com/1.pdf
www.example.com/2.pdf
www.example.com/3.pdf
Sourav
źródło

Odpowiedzi:

227

wget ma wbudowaną flagę: wget -i your_list Możesz znaleźć tego rodzaju rzeczy, czytającman wget

aureianimus
źródło
@ aureianimus, jeśli chcę pominąć link 2, to jak?
alhelal
To rozwiązanie działało dla mnie. Byłem zadowolony, że pobieranie odbywa się sekwencyjnie, a nie równolegle.
asiby
85

Połącz je równolegle z

cat urlfile | parallel --gnu "wget {}"

Domyślnie uruchomi tyle procesów, ile masz rdzeni, prawdopodobnie możesz zwiększyć to o kolejne 10 razy, jeśli naprawdę chcesz je szybko wyciągnąć, dodając „-j 20” po równolegle.

meawoppl
źródło
1
Po prostu nie mogę tego uruchomić. Nie widzę żadnego odradzającego się proca, przełączanie echa dla wgeta nic nie wyświetla
Jakub Bochenski
Niektóre wcześniejsze Ubuntus mają głupią wadę w tym miejscu: stackoverflow.com/questions/16448887/…
meawoppl
2
Zauważ, że „uruchomi tyle procesów, ile masz rdzeni” - przepustowość sieci prawdopodobnie będzie bardziej ograniczającym czynnikiem.
Wilf
2
To naprawdę zależy. W przypadku dużej liczby małych plików może to być prawie o rząd wielkości szybsze, ponieważ większość czasu przesyłania to handshake / TCP round trip. Również w sytuacji, gdy pobierasz z kilku mniejszych hostów, czasami przepustowość połączenia jest ograniczona, więc to wszystko popsunie.
meawoppl
2
Jest to bardzo przydatne, jeśli chcesz użyć listy względnych adresów URL (identyfikator zasobu bez nazw hostów) z różnymi nazwami hostów, na przykład: cat urlfile | równolegle --gnu "wget example1.com {}" i koci urlfile | równolegle --gnu "wget example2.com {}"
Mauricio Sánchez
10
xargs -i wget 'http://{}'  < your_list
Florian Diesch
źródło
9

parallelma wbudowaną flagę --arg-file( -a), która użyje pliku wejściowego jako źródła, więc możesz tego uniknąć cat |. Możesz użyć

parallel --gnu -a urlfile wget

Lub po prostu parallel --gnu wget < urlfile

yxogenium
źródło
5
awk '{print "http://" $0;}' list.txt | xargs -l1 wget

gdzie list.txt to plik listy

flo
źródło
4

Zobaczyłem odpowiedź Floriana Diescha.

Sprawiłem, że zadziałało, włączając parametr bqcdo polecenia.

xargs -i wget -bqc 'http://{}' < download.txt

Wszystkie pobieranie rozpoczęło się równolegle w tle.

  • -b: Tło. Przejdź do tła natychmiast po uruchomieniu
  • -q: Cichy. Wyłącz wyjście wget
  • -c: Dalej. Kontynuuj pobieranie częściowo pobranego pliku
życie ulicy
źródło
1

Link do pliku links.txt

Polecenie pobrania pliku wszystkich linków

cat links.txt | wget -i
DreamCoder
źródło
3
To nie działa. wget -i links.txtto właściwe polecenie.
Hery
Nie, to nie jest właściwe polecenie. Prawidłowe polecenie to: „cat links.txt | wget -i”
DreamCoder
0

Właśnie przetestowałem to:

xargs -a download_file -L1 wget

Mi to pasuje. Łącza w pliku txt muszą znajdować się w osobnych wierszach.

Kyle Felipe
źródło