Как написать скрипт BASH для загрузки и распаковки файла на Mac? - PullRequest
18 голосов
/ 19 декабря 2011

Мне нужно создать скрипт bash, который будет работать на Mac.Необходимо скачать ZIP-файл сайта и распаковать его в определенное место.

  1. Загрузить ZIP-файл (curl -O)
  2. Распаковать файлы в определенное место (unzip filename.zip path/to/save)
  3. Удалить ZIP-файл

Мне нужно сделать так, чтобы люди могли дважды щелкнуть текстовый файл на своем рабочем столе, и он автоматически запустится в терминале.

Как сделать так, чтобы пользователь мог дважды щелкнуть значок на рабочем столе, и он запустится?Какое расширение нужно файлу?

Ответы [ 3 ]

25 голосов
/ 19 декабря 2011

OSX использует тот же GNU sh / bash, что и Linux

#!/bin/sh

mkdir /tmp/some_tmp_dir                         && \
cd /tmp/some_tmp_dir                            && \
curl -sS http://foo.bar/filename.zip > file.zip && \
unzip file.zip                                  && \
rm file.zip

первая строка #!/bin/sh является так называемой строкой "шебанга" и является обязательной

16 голосов
/ 16 апреля 2014

BSD Tar может открыть zip-файл и распаковать через поток. Флаг -S должен следовать за перенаправлениями и -L, чтобы показать любые ошибки.Таким образом, будет работать следующее:

curl -SL http://example.org/file.zip | tar -xf - -C path/to/save
2 голосов
/ 03 мая 2018

Если вы не хотите изменять контекст каталога, используйте следующий скрипт:

#!/bin/bash

unzip-from-link() {
 local download_link=$1; shift || return 1
 local temporary_dir

 temporary_dir=$(mktemp -d) \
 && curl -LO "${download_link:-}" \
 && unzip -d "$temporary_dir" \*.zip \
 && rm -rf \*.zip \
 && mv "$temporary_dir"/* ${1:-"$HOME/Downloads"} \
 && rm -rf $temporary_dir
}

Использование:

# Either launch a new terminal and copy `git-remote-url` into the current shell process, 
# or create a shell script and add it to the PATH to enable command invocation with bash.

# Place zip contents into '~/Downloads' folder (default)
unzip-from-link "http://example.com/file.zip"

# Specify target directory
unzip-from-link "http://example.com/file.zip" "/your/path/here"

Вывод:

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 17.8M  100 17.8M    0     0  22.6M      0 --:--:-- --:--:-- --:--:-- 22.6M
Archive:  file.zip
  inflating: /tmp/tmp.R5KFNvgYxr/binary
...