Wget gebruiken om recursief een map met willekeurige bestanden erin op te halen

Ik heb een webdirectory waarin ik enkele configuratiebestanden opsla. Ik zou wget willen gebruiken om die bestanden naar beneden te halen en hun huidige structuur te behouden. De externe map ziet er bijvoorbeeld als volgt uit:

http://mysite.com/configs/.vim/

.vim bevat meerdere bestanden en mappen. Ik wil dat op de cliënt repliceren gebruikend wget. Ik kan de juiste combinatie van wget-vlaggen niet vinden om dit voor elkaar te krijgen. Enig idee?


Antwoord 1, autoriteit 100%

U moet de optie -np/--no-parentdoorgeven aan wget(naast -R/--recursive, natuurlijk), anders volgt het de link in de directory-index op mijn site naar de bovenliggende directory. Het commando ziet er dus als volgt uit:

wget --recursive --no-parent http://example.com/configs/.vim/

Om te voorkomen dat u de automatisch gegenereerde index.html-bestanden downloadt, gebruikt u de optie -R/--reject:

wget -r -np -R "index.html*" http://example.com/configs/.vim/

Antwoord 2, autoriteit 12%

Om recursief een map te downloaden die index.html*-bestanden en downloads weigert zonder de hostnaam, de bovenliggende map en de hele mapstructuur:

wget -r -nH --cut-dirs=2 --no-parent --reject="index.html*" http://mysite.com/dir1/dir2/data

Antwoord 3, autoriteit 11%

voor iemand anders die vergelijkbare problemen heeft. Wget volgt robots.txtdie u misschien niet toestaat om de site te pakken. Geen zorgen, je kunt het uitschakelen:

wget -e robots=off http://www.example.com/

http://www.gnu.org/software/wget/manual/html_node /Robot-exclusion.html


Antwoord 4, Autoriteit 4%

U moet de Vlag -M (Mirror) moeten gebruiken, omdat dat zorgt voor het niet knoeien met tijdstempels en om voor onbepaalde tijd terug te keren.

wget -m http://example.com/configs/.vim/

Als u de punten die door anderen in deze thread voegt, zou het zijn:

wget -m -e robots=off --no-parent http://example.com/configs/.vim/

Antwoord 5, Autoriteit 4%

Hier is de complete wget-opdracht die voor mij heeft gewerkt om bestanden te downloaden van de directory van een server (negeren van robots.txt):

wget -e robots=off --cut-dirs=3 --user-agent=Mozilla/5.0 --reject="index.html*" --no-parent --recursive --relative --level=1 --no-directories http://www.example.com/archive/example/5.3.0/

Antwoord 6

Indien --no-parentNiet Help, kunt u --includeoptie.

Directorystruct:

http://<host>/downloads/good
http://<host>/downloads/bad

En u wilt downloads/goodMaar niet downloads/badDirectory:

wget --include downloads/good --mirror --execute robots=off --no-host-directories --cut-dirs=1 --reject="index.html*" --continue http://<host>/downloads/good

Antwoord 7

wget -r http://mysite.com/configs/.vim/

werkt voor mij.

Misschien heb je een .wgetrc die het verstoort?


Antwoord 8

Gebruik het volgende commando om recursief een directory op te halen met gebruikersnaam en wachtwoord:

wget -r --user=(put username here) --password='(put password here)' --no-parent http://example.com/

Antwoord 9

Deze versie downloadt recursief en maakt geen bovenliggende mappen.

wgetod() {
    NSLASH="$(echo "$1" | perl -pe 's|.*://[^/]+(.*?)/?$|\1|' | grep -o / | wc -l)"
    NCUT=$((NSLASH > 0 ? NSLASH-1 : 0))
    wget -r -nH --user-agent=Mozilla/5.0 --cut-dirs=$NCUT --no-parent --reject="index.html*" "$1"
}

Gebruik:

  1. Toevoegen aan ~/.bashrcof plakken in terminal
  2. wgetod "http://example.com/x/"

Antwoord 10

Alles wat je nodig hebt zijn twee vlaggen, één is "-r"voor recursie en "--no-parent"(of -np) om niet in de '.'en ".."te gaan. Zoals dit:

wget -r --no-parent http://example.com/configs/.vim/

Dat is het. Het wordt gedownload naar de volgende lokale boomstructuur: ./example.com/configs/.vim.
Als u echter de eerste twee mappen niet wilt, gebruik dan de extra vlag --cut-dirs=2zoals gesuggereerd in eerdere antwoorden:

wget -r --no-parent --cut-dirs=2 http://example.com/configs/.vim/

En het zal uw bestandsstructuur alleen downloaden naar ./.vim/

In feite kreeg ik de eerste regel van dit antwoord precies van de wget handleiding, ze hebben een heel duidelijk voorbeeld aan het einde van sectie 4.3.


Antwoord 11

De volgende optie lijkt de perfecte combinatie te zijn bij recursieve download:

wget -nd -np -P /dest/dir –recursive http://url/dir1/dir2

Relevante fragmenten van man-pagina’s voor het gemak:

  -nd
   --no-directories
       Do not create a hierarchy of directories when retrieving recursively.  With this option turned on, all files will get saved to the current directory, without clobbering (if a name shows up more than once, the
       filenames will get extensions .n).
   -np
   --no-parent
       Do not ever ascend to the parent directory when retrieving recursively.  This is a useful option, since it guarantees that only the files below a certain hierarchy will be downloaded.

Antwoord 12

Wget 1.18 werkt mogelijk beter, ik ben bijvoorbeeld gebeten door een bug in versie 1.12 waarbij…

wget --recursive (...)

…haalt alleen index.html op in plaats van alle bestanden.

Tussenoplossing was om enkele 301-omleidingen op te merken en de nieuwe locatie te proberen – gezien de nieuwe URL kreeg wget alle bestanden in de map.


Antwoord 13

Allereerst bedankt aan iedereen die zijn antwoorden heeft gepost. Hier is mijn “ultieme” wget-script om een website recursief te downloaden:

wget --recursive ${comment# self-explanatory} \
  --no-parent ${comment# will not crawl links in folders above the base of the URL} \
  --convert-links ${comment# convert links with the domain name to relative and uncrawled to absolute} \
  --random-wait --wait 3 --no-http-keep-alive ${comment# do not get banned} \
  --no-host-directories ${comment# do not create folders with the domain name} \
  --execute robots=off --user-agent=Mozilla/5.0 ${comment# I AM A HUMAN!!!} \
  --level=inf  --accept '*' ${comment# do not limit to 5 levels or common file formats} \
  --reject="index.html*" ${comment# use this option if you need an exact mirror} \
  --cut-dirs=0 ${comment# replace 0 with the number of folders in the path, 0 for the whole domain} \
$URL

Nadien, Strippen van de query-params van URL’s zoals main.css?crc=12324567en het uitvoeren van een lokale server (bijv. Via python3 -m http.serverin het dir je bent gewoon af) om JS te draaien kan nodig zijn. Houd er rekening mee dat de --convert-linksOPTIEKENTSICHTINGEN ALLEEN NA DE PULTUE CRAWH TOEPASSEREN.

Als u ook probeert een website te wekken die binnenkort naar beneden kan gaan, moet u Neem contact op met de ArchivEteam en vraag ze om uw website aan hun archiefbot-wachtrij toe te voegen.


Antwoord 14

U moet het eenvoudig kunnen doen door een -r

toe te voegen

wget -r http://stackoverflow.com/

Antwoord 15

recursief wget negeren robots (voor websites)

wget -e robots=off -r -np --page-requisites --convert-links 'http://example.com/folder/'

-e robots=off zorgt ervoor dat het robots.txt voor dat domein negeert

-r maakt het recursief

-np = geen ouders, dus het volgt geen links naar de bovenliggende map

Other episodes