OS X: эквивалент Linux для wget


501

Как я могу сделать HTTP GET из сценария оболочки Un * x в стандартной системе OS X? (установка стороннего программного обеспечения не является опцией, так как она должна работать на множестве разных систем, которые я не контролирую).

Например, если я запускаю сервер Mercurial локально, выполняя hg serve :

... $ hg serve 

И затем из Linux, в котором есть команда wget, я делаю 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

И на терминале, в котором я запустил команду "hg serve" , я действительно вижу, что HTTP GET сделал свой путь:

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

Поэтому в Linux один из способов сделать HTTP GET из сценария оболочки - это использовать wget (если, конечно, эта команда установлена).

Какие есть еще способы сделать эквивалент wget ? В частности, я ищу что-то, что будет работать на стандартных установках OS X.


Ответы:


713

Я собираюсь сказать curl http://127.0.0.1:8000 -o outfile


27
Кроме того, wget доступен через MacPorts и Fink .
Брайан Клаппер

47
Я пришел сюда из поиска в Google о том, как получить wget на Mac, поэтому, несмотря на требование ОП избегать установки стороннего программного обеспечения, я предоставлю ссылку на краткое руководство, которое я нашел о том, как установить wget без использования MacPorts в будущем. ссылка.
Эйрик Х

32
Это также доступно на Homebrew.
Даниэль говорит: восстанови Монику

2
Кажется, не следует вперед.
nroose

15
Для загрузки файлов вы можете использовать -Oили --remote-nameпометить для автоматического переименования загруженного файла. напр.curl -O http://somehost.org/file.zip
nimcap

463

brew install wget

Homebrew - менеджер пакетов для OSX, аналогичный yum, apt-get, choco, emerge и т. Д. Имейте в виду, что вам также потребуется установить Xcode и инструменты командной строки. Практически любой, кто использует командную строку в OSX, захочет установить эти вещи в любом случае.

Если вы не можете или не хотите использовать домашний напиток, вы также можете:

Установите wget вручную:

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

Или используйте псевдоним bash:

function _wget() { curl "${1}" -o $(basename "${1}") ; };
alias wget='_wget'

11
Вы могли бы потратить некоторое время на объяснение доморощенного, но важно, чтобы здесь был видимый новичку wgetответ, поскольку единственный другой был удален его владельцем и curlявляется альтернативой, а не буквальным эквивалентом.
Крис Страттон

2
Спасибо, это было полезно для меня, так как кто-то с brew уже установлен.
enderland

4
@Michaelangelo И это не ваша работа, чтобы разрушать посты других. Вы не должны редактировать другие ответы, чтобы делать свои собственные замечания - это неуместно. Фактически, действия обсуждаются на Meta: meta.stackoverflow.com/questions/315892/…
Zizouz212

2
@EricHartford Пониженное голосование не решает проблему. Он предоставил одну альтернативу, не перечисляя другой вариант ручной установки wget.
Michaelangel007

1
Я думаю, у вас есть хорошая мысль. И я отредактирую ответ, чтобы включить ваши идеи.
Эрик Хартфорд

87

У Curl есть режим, который почти эквивалентен стандартному wget.

curl -O <url>

Это работает так же, как

wget <url>

И, если хотите, вы можете добавить это в ваш .bashrc:

alias wget='curl -O'

Это не на 100% совместимо, но работает для наиболее распространенного использования wget (IMO)


2
как ты рекурсивен с этим?
Джаспер

Вы можете использовать bash, чтобы добавить это в цикл следующим образом: for i in `seq 1 <n>` do curl -O <url>;done;где <n> - это количество раз, которое вы хотите повторить, а <url> - это URL для извлечения.
Blairg23

1
Иногда вам нужно добавить -Lфлаг, чтобы следовать перенаправлениям местоположения. Вы можете использовать curl -OL <url>для этого.
Густаво Штраубе

1
-Oтакже относится только к следующему аргументу, поэтому для загрузки нескольких URL-адресов необходимо использовать что-то вроде curl -O "$url1" -O "$url2"или printf %s\\n "$url1" "$url2"|xargs -n1 curl -O.
nisetama

Это отличный аккуратный совет. Спасибо огромное!
cmcromance

42

1) на вашем Mac типе

nano /usr/bin/wget

2) вставить следующее в

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

3) закройте, затем сделайте его исполняемым

chmod 777 /usr/bin/wget

Вот и все.


Лучше, чем псевдоним.
МК

3
Почти правильно. Я считаю, что первый шаг должен быть vim /usr/bin/wgetхотя;) хаха, шучу. спасибо за ответ - мне это никогда не приходило в голову, и по какой-то причине мне не хочется устанавливать brew / fink / что угодно, так что слава за легкий переносимый ответ.
Kasapo

3
-Lважно для обработки http 301ответов. wget обрабатывает их по умолчанию.
Донн Ли

"curl -L resource.url / tar.tar.gz -O tar.tar.gz" работал нормально, спасибо за это единственное работоспособное решение среди других в этой теме для моего варианта использования.
Алексей Кислицын

sudo nano / usr / bin / wget
Vino


12

Вот Mac OS X, эквивалентный Linux wget.

Для Linux, например Ubuntu на экземпляре AWS, используйте:

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

На Mac, то есть для локальной разработки, используйте это:

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

Параметр -o требуется на Mac для вывода в файл, а не на экран. Укажите другое целевое имя для переименования загруженного файла.

Используйте прописные -O для переименования с помощью wget. Нижний регистр -o будет указывать выходной файл для журнала передачи.


5

Вы можете либо собрать wget на компьютере Mac, либо использовать MacPorts для его непосредственной установки.

sudo port install wget 

Это будет работать как шарм, также вы можете обновиться до последней версии, как только она станет доступна. Порт намного стабильнее, чем brew, хотя у него гораздо меньше формул и портов.

Вы можете установить MacPorts, https://www.macports.org/install.phpвы можете скачать .pkgфайл и установить его.


а как вы устанавливаете порт?
Рой Лавджой

5

Вместо того, чтобы использовать эквивалент, вы можете попробовать "brew install wget" и использовать wget.

Вы должны иметь установленный Brew на вашем Mac.


1
Не собираюсь понижать голос, но это обман Эрика 13 июня 13 года.
MarkHu


2

wget предварительно скомпилированный Mac Binary

Для тех, кто ищет быструю установку wget на Mac, посмотрите предварительно скомпилированный двоичный файл Квентина Стаффорда-Фрейзера, который существует уже более десяти лет:

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

MD5 на 2008 год wget.zip: 24a35d499704eecedd09e0dd52175582
MD5 на 2005 год wget.zip: c7b48ec3ff929d9bd28ddb87e1a76ffb

Нет мусора make / install / port / brew / curl. Просто скачайте, установите и запустите. Работает с Mac OS X 10.3-10.12 +.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.