Как написать BASH script для загрузки и распаковки файлов на Mac?
Мне нужно создать bash script, который будет работать на Mac. Он должен загрузить ZIP файл сайта и разархивировать его в определенное место.
- Загрузите ZIP файл (
curl -O
)
- Разархивируйте файлы в определенное место (
unzip filename.zip path/to/save
)
- Удалить .zip файл
Мне нужно сделать так, чтобы люди могли дважды щелкнуть текстовый файл на своем рабочем столе, и он будет автоматически запускаться в терминале.
Как сделать так, чтобы пользователь мог дважды щелкнуть значок на рабочем столе, и он запустится? Какое расширение требуется файлу?
Ответы
Ответ 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.