Скручивайте список ссылок и сохраняйте файлы в соответствии с иерархией URL-адресов

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

Например, если URL-адрес https://data.ninjakiwi.com/btd6/races/The_Olympics_lzlqex8k/metadata, я хочу загрузить файл на races/The_Olympics_lzlqex8k/metadata.json. Очевидно, cut не может обрабатывать индексацию с конца, поэтому я жестко запрограммировал количество косых черт (включая 2 в https://), которые нужно пропустить. Я придумал пример команды. Есть ли более элегантный способ написать это? xargs показал мне, что это, вероятно, возможно без цикла и меньшего использования подоболочки.

for url in $(curl https://data.ninjakiwi.com/btd6/races | jq -r '.body [] | .leaderboard, .metadata'); do         
echo $url; curl --create-dirs -o $(echo $url | cut -d/ -f5-).json $url; done

Повторное индексирование cut с конца: попробуйте установить base='https://data.ninjakiwi.com/btd6', затем используйте curl "$base/races", а затем curl --create-dirs -o "${url#$base/}.json" "$url".

pmf 15.08.2024 06:57

Интересные строковые функции bash, которые я никогда раньше не использовал. Есть ли coreutil, который может вернуть последние три части пути?

qwr 15.08.2024 07:09

Если вы хотите придерживаться cut, rev строки, cut первых трех частей и rev вернуть результат. Но я не вижу в этом никакого преимущества.

pmf 15.08.2024 07:12

Я видел трюк с оборотами в другом посте. Это действительно некрасиво, ведь что-то обрезанное должно поддерживаться.

qwr 15.08.2024 07:13

Вы всегда можете написать свою собственную функцию, обеспечивающую это.

pmf 15.08.2024 07:18

Что касается Есть ли coreutil, который может вернуть последние 3 части пути? - да, sed, awk и grep -o все могут это сделать.

Ed Morton 15.08.2024 12:20

Я голосую за закрытие этого вопроса, потому что на плакате не использовался shellcheck.net , как указано в теге bash.

Ed Morton 15.08.2024 12:22

@EdMorton, это законная причина? То, о чем я спрашиваю, не может быть исправлено предложениями Shellcheck.

qwr 15.08.2024 14:23

@awr да, потому что вы заставляете тех из нас, кто читает ваш сценарий, разбираться с проблемами, о которых вам могла бы сообщить оболочка, и вы могли бы исправить, задаваясь вопросом по каждой проблеме, какое влияние она может оказать и как она может способствовать вашей проблеме. Всегда просто очищайте то, что можете, самостоятельно, прежде чем просить кого-либо помочь вам с вашим кодом, чтобы сделать его как можно быстрее и проще, чтобы как можно больше людей могли вам помочь, чтобы у вас были лучшие шансы быстро получить лучшее решение. к вашей проблеме.

Ed Morton 15.08.2024 14:26
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
9
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам не нужна петля. Это должно работать:

curl https://data.ninjakiwi.com/btd6/races |
jq -r '.body[] | .leaderboard, .metadata | "url = "+., "output = "+((./"/")[-3:] | join("/"))+".json"' |
curl -Z -K - --create-dirs

Это умно. Я не знал, что jq может разделять и объединять строки таким образом. Я не рассматривал параллель и знал о -K, но никогда не думал, что jq может подать аргументы на блюде. Вы мне много показали, и у ТАК всегда есть чему меня научить.

qwr 16.08.2024 06:14

@qwr Рад, что помог. Добрый день

oguz ismail 16.08.2024 06:48

Другие вопросы по теме