CURL per scaricare una directory


38

Sto cercando di scaricare una directory del sito Web completa utilizzando CURL. Il seguente comando non funziona:

curl -LO http://example.com/

Esso restituisce un errore: curl: Remote file name has no length!.

Ma quando lo faccio: curl -LO http://example.com/someFile.typefunziona. Qualche idea su come scaricare tutti i file nella directory specificata? Grazie.

Risposte:


33

Funziona sempre per me, incluso nessun genitore e ricorsivo per ottenere solo la directory desiderata.

 wget --no-parent -r http://WEBSITE.com/DIRECTORY

1
Questa dovrebbe essere la risposta accettata.
Juan Jimenez,

Sto provando a scaricare una cartella da Git. Ho provato wget --no-parent -r http://WEBSITE.com/DIRECTORYe anche senza --no-parent- non ha funzionato.
Sam-T,

32

HTTP non ha davvero una nozione di directory. Le barre diverse dalle prime tre ( http://example.com/) non hanno alcun significato speciale se non rispetto agli ..URL relativi. Quindi, a meno che il server non segua un formato particolare, non c'è modo di "scaricare tutti i file nella directory specificata".

Se si desidera scaricare l'intero sito, la soluzione migliore è attraversare ricorsivamente tutti i collegamenti nella pagina principale. Curl non può farlo, ma wget può. Funzionerà se il sito Web non è troppo dinamico (in particolare, wget non vedrà i link creati dal codice Javascript). Inizia wget -r http://example.com/e cerca in "Opzioni di recupero ricorsivo" e "Opzioni di accettazione / rifiuto ricorsivo" nel manuale di wget per le opzioni più pertinenti (profondità di ricorsione, elenchi di esclusione, ecc.).

Se il sito Web tenta di bloccare i download automatici, potrebbe essere necessario modificare la stringa dell'agente utente ( -U Mozilla) e ignorare robots.txt(creare un file vuoto example.com/robots.txte utilizzare l' -ncopzione in modo che wget non tenti di scaricarlo dal server).


Come wget è in grado di farlo. ??
Srikan,

@Srikan wget analizza l'HTML per trovare i collegamenti che contiene e scarica ricorsivamente (una selezione di) quei collegamenti.
Gilles 'SO- smetti di essere malvagio' il

Se i file non hanno collegamenti interni, il download ricorsivo non riesce a ottenere tutti i file. Diciamo che esiste una cartella HTTP di alcuni file txt. Wget riuscirà a ottenere tutti i file. Lasciami provare dopo questo commento
Srikan,

@Srikan HTTP non ha il concetto di directory. Download ricorsivo significa seguire i collegamenti nelle pagine Web (comprese le pagine Web generate dal server per mostrare un elenco di directory, se il server Web lo fa ).
Gilles 'SO- smetti di essere malvagio' il

wget supporta ignorando robots.txt con il flag -e robots=off. In alternativa puoi evitare di scaricarlo rifiutandolo con -R "robots.txt".
Ryan Krage,

17

In questo caso, curlNON è lo strumento migliore. È possibile utilizzare wgetcon l' -rargomento, in questo modo:

wget -r http://example.com/ 

Questa è la forma più semplice e puoi anche usare argomenti aggiuntivi. Per ulteriori informazioni, consultare il manpage( man wget).


5

Questo non è possibile Non esiste un modo standard, generalmente implementato, per un server Web di restituire il contenuto di una directory. La maggior parte dei server genera un indice HTML di una directory, se configurato per farlo, ma questo output non è standard, né garantito in alcun modo. È possibile analizzare questo codice HTML, ma tenere presente che il formato cambierà da server a server e non sarà sempre abilitato.


Guarda questa app chiamata Site Sucker. sitesucker.us . Come lo fanno?
Foo,

Analizzano il file HTML e scaricano tutti i collegamenti in esso.
Brad,

Usando wgeto curl?
Foo,

7
@Brad: curl non analizza l'HTML, ma wget fa esattamente questo (si chiama recupero ricorsivo).
Gilles 'SO- smetti di essere malvagio' il

1
Ah, bene sono corretto! gnu.org/software/wget/manual/html_node/… OP dovrebbe essere consapevole che questo non ottiene ancora quello che sta cercando ... segue solo i collegamenti disponibili nelle pagine restituite.
Brad,

2

Puoi usare l'estensione Firefox DownThemAll! Ti permetterà di scaricare tutti i file in una directory con un clic. È anche personalizzabile ed è possibile specificare quali tipi di file scaricare. Questo è il modo più semplice che ho trovato.


0

Qui potresti trovare un uso per uno scarificatore di siti Web, questo scaricherà tutto e modificherà i contenuti / i collegamenti interni per l'uso locale. Una buona può essere trovata qui: http://www.httrack.com

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.