Script fuer HTTPS Download eines Verzeichnisses in der OpenBSD Basisinstallation: Geht das auch einfacher?

dettus

Bicycle User
Hey!
Triggerwarnung: In diesem Post kommt AUCH NetBSD vor ;)

Ich habe gerade folgendes Problem: Ich moechte ein Skript schreiben, was In einer frischen OpenBSD Installation (Ganz wichtig), ein komplettes Verzeichnis runterlaedt.

HAETTE ich wget, wuerde ich einfach

Code:
wget -r --level=1 https://ftp.fau.de/netbsd/NetBSD-10.1/alpha/binary/sets/

machen. Habe ich aber nicht. AusGruenden(tm) kann ich das auch nicht nachinstallieren. Also sieht das bei mir derzeit so aus:


Code:
ftp https://ftp.fau.de/netbsd/NetBSD-10.1/alpha/installation/instkernel/netbsd.gz
ftp https://ftp.fau.de/netbsd/NetBSD-10.1/alpha/installation/netboot/netboot


for I in MD5 SHA512 \
        base.tgz    comp.tgz   debug.tgz \
        etc.tgz     games.tgz  gpufw.tgz \
        man.tgz     misc.tgz   modules.tgz \
        rescue.tgz  tests.tgz  text.tgz \
        xbase.tgz   xcomp.tgz  xdebug.tgz \
        xetc.tgz    xfont.tgz  xserver.tgz \
        kern-GENERIC.tgz
do
        ftp https://ftp.fau.de/netbsd/NetBSD-10.1/alpha/binary/sets/$I
done


md5 -C MD5 *.tgz
sha512 -C SHA512 *.tgz
Weiss jemand einen besseren Weg?
(Hintergrund ist der, dass ich gerade eine Anleitung zum Abtippen schreibe)
 
Das sieht schon nach gutem Ansatz aus, wüsste es jetzt auch nicht besser. ;)

Ich habe mal GPT5 belästigt und wenn es stimmt, dass fetch Bordmittel ist (ich wittere die Gefahr des Vertippens jetzt schon!):

Unter OpenBSD nur mit Bordmitteln (kein wget, kein curl, keine zusätzliche Software) geht das nur, wenn ein geeignetes Tool wie ftp, ftp(1) oder fetch(1) vorhanden ist — aber OpenBSD liefert fetch(1) standardmäßig. Wenn du wirklich nur das lieferbare Basissystem meinst, ist fetch das Werkzeug. Folgende Varianten:

1) Einzelne Datei herunterladen
- fetch URL
Beispiel:
fetch https://example.com/datei.html

2) Mehrere Dateien nacheinander (Shell-Schleife)
- Für eine Liste von Pfaden:
for p in /pfad1 /pfad2/index.html /pfad3/date.pdf; do fetch "https://example.com${p}"; done

3) Ganzes Webverzeichnis spiegeln (keine rekursive HTTP-Listing-Unterstützung in fetch)
- Falls der Webserver ein Verzeichnislisting liefert (index of) und du die Links parsen kannst, geht's mit Kombination aus fetch + awk/sed/grep:
a) fetch die Listing-Seite:
fetch -o listing.html https://example.com/verzeichnis/
b) Extrahiere Links (z. B. nur href-Werte):
awk -F'"' '/href=/ {for(i=1;i<=NF;i++) if($i~/^\/|^http/) print $i}' listing.html | sed 's/^\/\+//' > links.txt
c) Danach jede URL holen:
while read l; do fetch "https://example.com/${l}"; done < links.txt

Hinweise / Einschränkungen
  • fetch unterstützt kein rekursives Spiegeln wie wget -r. Du musst die Linkliste selbst erzeugen/parsen.
  • Bei vielen Dateien oder komplexen HTML musst du das Parsing anpassen; einfache awk/sed reicht nur für einfache Listings.
  • Für FTP-Server kannst du das eingebaute ftp(1) nutzen und mget verwenden:
ftp hostname
cd pfad
mget *

Wenn du mir eine konkrete URL nennst oder sagst, ob es ein index-of-Listing ist, schreibe ich dir das genaue Shell-Skript, das nur Bordmittel verwendet.
 
Leider nicht.... :(
Auch auf meinem Desktop existiert kein fetch.


Code:
; fetch
bash: fetch: command not found

Auch wenn Ansatz mit awk und sed schon okay ist... Ich wuerde in meiner Anleitung gerne moeglichst wenige Tools verwenden...
Sonst wuerde es auch mit
Code:
ftp -o- https://ftp.fau.de/netbsd/NetBSD-10.1/alpha/binary/sets/ | awk -F'"' '{ print $6; }' -

gehen...


P.S.: An alle: BITTE BITTE JETZT KEIN FASS WEGEN DER "KUENSTLICHEN DUMMHEIT" GPT5 AUFMACHEN!
 
Auch auf meinem Desktop existiert kein fetch.
Meh, zumindest bei FreeBSD ist das Bordmittel. :o

Auch wenn Ansatz mit awk und sed schon okay ist... Ich wuerde in meiner Anleitung gerne moeglichst wenige Tools verwenden...
Klar, das sollte ja sowieso das Ziel sein.

P.S.: An alle: BITTE BITTE JETZT KEIN FASS WEGEN DER "KUENSTLICHEN DUMMHEIT" GPT5 AUFMACHEN!
Danke. Ich hatte befürchtet, du wäschst mir bereits den Kopf deswegen. :D
 
der OpenBSD ftp(1) kann aber auch globbing und multi-at-once (siehe AUTO-FETCHING in der man page)..

z.B. geht mit ksh expansion alles in einem call zu ftp(1) ftp https://ftp.fau.de/netbsd/NetBSD-10.1/alpha/binary/sets/{etc,man}.tgz

(ein *tgz remote glob mag er bei mir gerade aber nicht... )
 
Zurück
Oben