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

Odpowiedzi:


227

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


@ 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.


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


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


5
awk '{print "http://" $0;}' list.txt | xargs -l1 wget

gdzie list.txt to plik listy


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

1

Link do pliku links.txt

Polecenie pobrania pliku wszystkich linków

cat links.txt | wget -i

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.