Подтвердить что ты не робот

Как написать BASH script для загрузки и распаковки файлов на Mac?

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

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

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

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

4b9b3361

Ответ 1

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 называется так называемой "shebang" и обязательна

Ответ 2

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

curl -SL http://example.org/file.zip | tar -xf - -C path/to/save

Ответ 3

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

#!/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

Ответ 4

Другие ответы работают, но вы также можете скачать и распаковать потоковую передачу в tar с помощью pipe, как показано в примере ниже. Это простая команда. Работает в MacOS Mojave. Это очень полезно для загрузки больших пакетов внутри образов докеров или для установки программного обеспечения с удаленными большими библиотеками. Также протестирован в Ubuntu, я не вижу причин, чтобы не работать в других дистрибутивах.

curl -SL https://www.sample-videos.com/zip/10mb.zip | tar -xz - -C.