Utilizarea caracterelor wildcards în interogarea wget sau curl (Programare, Curl, Descărcați, Wget)

mart1n a intrebat.

Este posibil să folosiți wildcards în interogările wget atunci când descărcați din directoare? Practic, am un site, să zicem, www.download.example.com/dir/version/package.rpm. Howevery, directorul de versiuni se schimbă tot timpul și uneori conține mai multe pachete RPM. Există o singură interogare wget care să îmi aducă doar și toate pachetele din directorul version director fără să știu care este versiunea respectivă? În lumea mea ideală, interogarea ar fi ceva de genul:

wget www.download.example.com/dir/*/*.rpm

Dacă există o modalitate de a face acest lucru cu curl, ar funcționa și asta.

3 răspunsuri
user2062950

Nu puteți utiliza caractere wildcards în wget ci în -A steagul ar trebui să funcționeze. De la wget manpage:

Doriți să descărcați toate gif-urile dintr-un director de pe un server http. Ați încercat wget http://www.server.com/dir/*.gif, dar nu a funcționat deoarece recuperarea http nu acceptă globbing. În acest caz, utilizați: wget -r -l1 --no-parent -A.gif http://www.server.com/dir/

Editare: am găsit o întrebare conexă

În ceea ce privește directoarele:

Există un utilitar numit LFTP, care are un anumit suport pentru globbing. Aruncați o privire la pagina de manual. Există o altă întrebare pe Linux & Unix care acoperă utilizarea acestuia într-un scenariu similar cu al dumneavoastră.

Comentarii

  • Ok, acest lucru îmi permite să specific că vreau doar .rpm fișiere. Dar rămâne problema numelui ambiguu al directorului. Cum pot spune wget că numele directorului este irelevant și să trec doar la directorul care conține fișierele RPM. –  > Por mart1n.
  • @mart1n a adăugat informații despre lftp la răspuns, sperăm că ajută – user2062950
Ivan

Dacă reușiți să găsiți un model în interogarea dvs., puteți utiliza expansiunea de brațe bash pentru a face această sarcină.

De exemplu, în cazul tău, poți folosi ceva de genul::

wget www.download.example.com/dir/{version,old}/package{00..99}.rpm

De asemenea, puteți combina acest lucru cu -A și -R parametrii pentru a vă filtra rezultatele.

not2qubit

Deși soluția de mai sus funcționează oarecum, aceasta eșuează atunci când doriți să descărcați doar anumite directoare, dar nu toate. De exemplu, dacă aveți:

http://site.io/like/
http://site.io/like2/
http://site.io/nolike/

În schimb, puneți numele directoarelor pe care le doriți într-un fișier text, de ex: dirs.txt:

like/
like2/

Apoi utilizați wget cu următoarele opțiuni de comandă -i dirs.txt -B <base-URL> în felul următor:

wget -nH -nc -np -r -e robots=off -R "index.html*" -i dirs.txt -B http://site.io/

Deoarece, nu cred că puteți utiliza directoare în -A și -R liste. (?)