Получить первый матч из CURL grep call - PullRequest
0 голосов
/ 02 мая 2019

Цель:

Я пытаюсь написать скрипт, который будет извлекать два URL-адреса со страницы релиза GitHub и делать с каждым что-то свое.

Пока:

Вот что у меня есть.

λ curl -s https://api.github.com/repos/mozilla-iot/gateway/releases/latest | grep "browser_download_url.*tar.gz" | cut -d : -f 2,3 | tr -d \"

Это вернет следующее:

"https://github.com/mozilla-iot/gateway/releases/download/0.8.1/gateway-8c29257704ddb021344bdaaa790909a0eacf3293bab94e02859828a6fd9b900a.tar.gz"
"https://github.com/mozilla-iot/gateway/releases/download/0.8.1/node_modules-921bd0d58022aac43f442647324b8b58ec5fdb4df57a760e1fc81a71627f526e.tar.gz"

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

Ответы [ 2 ]

1 голос
/ 02 мая 2019

Извлечь первую строку легко, перенаправив вывод в head -n1. для решения вашей проблемы вам нужно больше, чем просто получить первый URL-адрес вывода cURL. попробуй:

#!/bin/bash

# fetch your URLs
answer=`curl -s https://api.github.com/repos/mozilla-iot/gateway/releases/latest | grep "browser_download_url.*tar.gz" | cut -d : -f 2,3 | tr -d \"`

# get URLs and file names
first_file=`echo "$answer" | grep -Eo '.+?\.tar\.gz' | head -n1 | tr -d " "`
second_file=`echo "$answer" | grep -Eo '.+?\.tar\.gz' | head -n2 | tail -1 | tr -d " "`
first_file_name=`echo "$answer" | grep -Eo '[^/]+?\.tar\.gz' | head -n1 `
second_file_name=`echo "$answer" | grep -Eo '[^/]+?\.tar\.gz' | head -n2 | tail -1`

#echo $first_file
#echo $first_file_name
#echo $second_file_name
#echo $second_file

# download first file
wget "$first_file"

# extracting first one that must be in the current directory.
# else, change the directory first and put the path before $first_file!
tar -xzf "$first_file_name"

# do your stuff with the second file
0 голосов
/ 02 мая 2019

Вы можете просто перенаправить URL-адреса на xargs curl;

curl -s https://api.github.com/repos/mozilla-iot/gateway/releases/latest |
grep "browser_download_url.*tar.gz" |
cut -d : -f 2,3 | tr -d \" |
xargs curl -O

Или, если вы хотите сделать еще какие-то манипуляции с каждым URL, возможно, переберите результаты:

curl ... | grep ... | cut ... | tr ... |
while IFS= read -r url; do
    curl -O "$url"
    : maybe do things with "$url" here
done

Последнее может быть легко расширено до чего-то вроде

... | while IFS= read -r url; do
    d=${url##*/}
    mkdir -p "$d"
    ( cd "$d"
      curl -O "$url" 
      tar zxf *.tar.gz
      # end of subshell means effects of "cd" end
    )
 done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...