Если я скопирую / вставлю это в командной строке, я могу загрузить ВСЕ архивные файлы GitHub в течение 24 часов 1 января 2015 года:
wget http://data.gharchive.org/2015-01-01-{0..23}.json.gz
Я хочу быть в состоянии сделать это в течение нескольких дней, используя скрипт. Например, в моем файле .sh:
#!/bin/bash
while read line
do
wget $line
done < download_github_files.txt
И в download_github_files.txt
меня есть:
http://data.gharchive.org/2015-01-01-{0..23}.json.gz
http://data.gharchive.org/2015-01-02-{0..23}.json.gz
http://data.gharchive.org/2015-01-03-{0..23}.json.gz
К сожалению, когда я запускаю файл .sh, я получаю три распечатки:
--2019-02-27 19:00:28-- http://data.gharchive.org/2015-01-01-'%7B'0..23'%7D'.json.gz
Resolving data.gharchive.org (data.gharchive.org)...
Connecting to data.gharchive.org (data.gharchive.org)...
connected.
HTTP request sent, awaiting response... 404 Not Found
2019-02-27 19:00:28 ERROR 404: Not Found.
Проблема явно с {
. Экранирование этого символа не помогает, потому что он должен быть итератором из того, что я могу сказать.
Как я могу скачать эти файлы с помощью wget
?
РЕДАКТИРОВАТЬ:
Хм. У меня та же проблема, я пытаюсь использовать первое опубликованное решение:
Файл .sh (ясно, что я собираюсь делать все месяцы года, но я ограничился февралем для простоты визуализации):
#!/bin/bash
for i in {01..12}; do
if [ ${i} = 02 ]; then
for j in {01..28}; do
for k in {0..23}; do
wget http://data.gharchive.org/2011-${i}-${j}-${k}.json.gz
done
done
fi
done
Та же проблема. Например, я получаю:
--2019-02-27 20:50:05-- http://data.gharchive.org/2011-02-01-5.json.gz
Resolving data.gharchive.org (data.gharchive.org)...
Connecting to data.gharchive.org (data.gharchive.org)...
HTTP request sent, awaiting response... 404 Not Found
2019-02-27 20:50:05 ERROR 404: Not Found.
Но если я запускаю команду
wget http://data.gharchive.org/2011-02-01-5.json.gz
тогда у меня нет проблем. Я могу загрузить файл вручную, но не могу сделать это в скрипте bash. Есть другие идеи?