OS X: Entspricht dem wget von Linux

499

Wie kann ich ein HTTP-GET aus einem Un * x-Shell-Skript auf einem Standard-OS X-System ausführen? (Die Installation von Software von Drittanbietern ist keine Option, da diese auf vielen verschiedenen Systemen ausgeführt werden muss, auf die ich keine Kontrolle habe.)

Zum Beispiel, wenn ich den Mercurial-Server lokal starte und einen hg-Aufschlag mache :

... $ hg serve 

Und dann von einem Linux, der die hat wget Befehl ich eine wget:

... $  wget http://127.0.0.1:8000
--2010-12-31 22:18:25--  http://127.0.0.1:8000/
Connecting to 127.0.0.1:8000... connected.
HTTP request sent, awaiting response... 200 Script output follows
Length: unspecified [text/html]
Saving to: `index.html

Und auf dem Terminal, in dem ich den Befehl "hg serve" gestartet habe , kann ich tatsächlich sehen, dass ein HTTP-GET seinen Weg gefunden hat:

127.0.0.1 - - [30/Dec/2010 22:18:17] "GET / HTTP/1.0" 200 -

Unter Linux besteht eine Möglichkeit, ein HTTP-GET über ein Shell-Skript auszuführen , darin, wget zu verwenden (sofern dieser Befehl natürlich installiert ist).

Welche anderen Möglichkeiten gibt es, um das Äquivalent eines Wget zu tun ? Ich suche insbesondere nach etwas, das bei Standardinstallationen von OS X funktioniert.

SyntaxT3rr0r
quelle

Antworten:

712

Ich werde sagen müssen curl http://127.0.0.1:8000 -o outfile

SiegeX
quelle
27
Auch wget ist sowohl über verfügbar MacPorts und Fink .
Brian Clapper
47
Ich bin von einer Google-Suche hierher gekommen, um zu erfahren, wie man wget auf einen Mac bringt. Trotz der Anforderung des OP, die Installation von Software von Drittanbietern zu vermeiden, werde ich einen Link zu einer Kurzanleitung bereitstellen, die ich gefunden habe, wie man wget installiert, ohne MacPorts für die Zukunft zu verwenden Referenz.
Eirik H
32
Es ist auch auf Homebrew erhältlich.
Daniel sagt Reinstate Monica
2
Scheint nicht vorwärts zu folgen.
Nroose
14
Zum Herunterladen von Dateien können Sie die heruntergeladene Datei automatisch umbenennen -Ooder --remote-namemarkieren. zBcurl -O http://somehost.org/file.zip
Nimcap
463

brew install wget

Homebrew ist ein Paketmanager für OSX analog zu yum, apt-get, choco, emer usw. Beachten Sie, dass Sie auch Xcode und die Befehlszeilentools installieren müssen. Praktisch jeder, der die Befehlszeile in OSX verwendet, möchte diese Dinge trotzdem installieren.

Wenn Sie Homebrew nicht verwenden können oder wollen, können Sie auch:

Installieren Sie wget manuell:

curl -# "http://ftp.gnu.org/gnu/wget/wget-1.17.1.tar.xz" -o "wget.tar.xz"
tar xf wget.tar.xz
cd wget-1.17.1
./configure --with-ssl=openssl -with-libssl-prefix=/usr/local/ssl && make -j8 && make install

Oder verwenden Sie einen Bash-Alias:

function _wget() { curl "${1}" -o $(basename "${1}") ; };
alias wget='_wget'
Eric Hartford
quelle
11
Sie können sich einen Moment Zeit nehmen, um Homebrew zu erklären, aber es ist wichtig, dass es hier eine für Neulinge sichtbare wgetAntwort gibt, da die einzige andere von ihrem Besitzer gelöscht wurde und curleher eine Alternative als ein wörtliches Äquivalent ist.
Chris Stratton
2
Danke, das war hilfreich für mich als jemand mit bereits installiertem Gebräu.
Enderland
4
@ Michaelangelo Und das ist nicht deine Aufgabe, die Beiträge anderer zu zerstören. Sie sollten keine anderen Antworten bearbeiten, um Ihre eigenen Punkte zu machen - das ist unangemessen. Tatsächlich werden die Aktionen auf Meta diskutiert: meta.stackoverflow.com/questions/315892/…
Zizouz212
2
@EricHartford Down-Voting löst das Problem nicht. Es bot eine Alternative, ohne die andere Option zur manuellen Installation von wget aufzulisten .
Michaelangel007
1
Ich denke du hast einen guten Punkt. Und ich werde die Antwort bearbeiten, um Ihre Ideen einzubeziehen.
Eric Hartford
87

Curl hat einen Modus, der fast dem Standard-Wget entspricht.

curl -O <url>

Das funktioniert genauso wie

wget <url>

Und wenn Sie möchten, können Sie dies zu Ihrer .bashrc hinzufügen:

alias wget='curl -O'

Es ist nicht 100% kompatibel, funktioniert aber für die gängigste Wget-Nutzung (IMO).

Ed Henderson
quelle
2
Wie machst du das rekursiv?
Jasper
Sie können bash verwenden, um dies zu einer Schleife wie der folgenden hinzuzufügen: for i in `seq 1 <n>` do curl -O <url>;done;Dabei ist <n> die Häufigkeit, mit der Sie iterieren möchten, und <url> die URL, die abgerufen werden soll.
Blairg23
1
Manchmal müssen Sie das -LFlag hinzufügen , um Standortumleitungen zu folgen. Sie können das verwenden curl -OL <url>, um das zu tun.
Gustavo Straube
1
-Ogilt auch nur für das nächste Argument. Um mehrere URLs herunterzuladen, müssen Sie so etwas wie curl -O "$url1" -O "$url2"oder verwenden printf %s\\n "$url1" "$url2"|xargs -n1 curl -O.
Nisetama
Es ist ein toller, ordentlicher Tipp. Ich danke dir sehr!
cmcromance
42

1) auf Ihrem Mac-Typ

nano /usr/bin/wget

2) Fügen Sie Folgendes ein

#!/bin/bash
curl -L $1 -o $2

3) schließen und dann ausführbar machen

chmod 777 /usr/bin/wget

Das ist es.

Eamon Straughn
quelle
Besser als ein Alias.
MK
3
Fast richtig. Ich glaube, dass Schritt eins sein sollte vim /usr/bin/wget;) haha ​​nur ein Scherz. Vielen Dank für die Antwort - das ist mir nie wirklich in den Sinn gekommen und aus irgendeinem Grund habe ich keine Lust, Brew / Fink / was auch immer zu installieren, also ein großes Lob für die einfache tragbare Antwort.
Kasapo
3
-List wichtig für den Umgang mit http- 301Antworten. wget behandelt sie standardmäßig.
Donn Lee
"curl -L resource.url / tar.tar.gz -O tar.tar.gz" hat gut funktioniert, danke für diese einzige praktikable Lösung, unter anderem in diesem Thread für meinen Anwendungsfall.
Oleksii Kyslytsyn
sudo nano / usr / bin / wget
Vino
18

Verwenden Sie curl;

curl http://127.0.0.1:8000 -o index.html
ismail
quelle
12

Hier ist das Mac OS X-Äquivalent zu Linux's Wget.

Verwenden Sie für Linux, z. B. Ubuntu auf einer AWS-Instanz, Folgendes:

wget http://example.com/textfile.txt

Verwenden Sie auf einem Mac, dh für die lokale Entwicklung, Folgendes:

curl http://example.com/textfile.txt -o textfile.txt

Der Parameter -o wird auf einem Mac für die Ausgabe in eine Datei anstelle des Bildschirms benötigt. Geben Sie einen anderen Zielnamen zum Umbenennen der heruntergeladenen Datei an.

Verwenden Sie Großbuchstaben -O zum Umbenennen mit wget. Kleinbuchstaben -o gibt die Ausgabedatei für das Übertragungsprotokoll an.

Oliver Schafeld
quelle
5

Sie können wget entweder auf dem Mac-Computer erstellen oder mit MacPorts direkt installieren.

sudo port install wget 

Dies würde wie ein Zauber funktionieren, außerdem können Sie auf die neueste Version aktualisieren, sobald diese verfügbar ist. Port ist viel stabiler als Brew, obwohl es viel weniger Formel und Ports gibt.

Sie können MacPorts installieren, indem https://www.macports.org/install.phpSie die .pkgDatei herunterladen und installieren.

Hammad Haleem
quelle
und wie installiert man port?
Roy Lovejoy
5

Anstatt mit Äquivalent zu arbeiten, können Sie "Brew Install Wget" ausprobieren und wget verwenden.

Sie müssen Brew auf Ihrem Mac installiert haben.

Jaya Konduru
quelle
1
Ich werde nicht abstimmen, aber dies ist ein Betrug von Eric, der am 13. Juni 13 geantwortet hat.
MarkHu
4

Sie könnten curlstattdessen verwenden. Es ist standardmäßig in installiert /usr/bin.

James Sumners
quelle
2

wget Precompiled Mac Binary

Wenn Sie nach einer schnellen wget-Installation auf einem Mac suchen, lesen Sie hier die vorkompilierte Binärdatei von Quentin Stafford-Fraser, die es seit über einem Jahrzehnt gibt:

https://statusq.org/archives/2008/07/30/1954/

MD5 für 2008 wget.zip: 24a35d499704eecedd09e0dd52175582
MD5 für 2005 wget.zip: c7b48ec3ff929d9bd28ddb87e1a76ffb

Kein Make / Install / Port / Brew / Curl Junk. Einfach herunterladen, installieren und ausführen. Funktioniert mit Mac OS X 10.3-10.12 +.

Beejor
quelle