Как загрузить несколько тысяч файлов?

[1123197] Переменная на баше не типизирована. Если вы хотите, чтобы условие всегда вычислялось целыми числами, вы можете использовать [1123651]delcare -i[1123652], чтобы переменная всегда была целым числом. Из [1123653]bash manpage[1123654]:

Таким образом, ваш пример становится:

Обратите внимание, что если у вас [1123655]bash[1123656] версии 4.x, вы должны использовать новый тест [1123657][[...]][1123658] вместо [1123659][...][1123660].[1123202].

1
23.10.2015, 21:10
3 ответа

Я считаю, что вы можете написать небольшой сценарий оболочки, чтобы делать то, что вы хотите. Используйте цикл for для просмотра файлов, wget или аналогично загрузке и записи текущего файла в файл, из которого вы можете прочитать, где вы были после прерывания.

Пример:

if [-f $ FILE] count = $ (cat file) for i in {$ COUNT ..5} do {{ 1}} wget https://foo.bar/name_$i echo "$ i"> $ FILE сделано else для i в {1 ..5} do wget https://foo.bar/name_$i echo "$ i"> $ FILE готово {{1} } fi

Это только основная идея, возможно, есть несколько более мелких ошибок, но я полагаю, вы поняли мою идею.

3
27.01.2020, 23:20
BASE_URL='http://some.site.somewhere.com/some/path'
LASTFILE='./countfile'
last=1
[ -e "$LASTFILE" ] && last=$(cat "$LASTFILE")

for i in $(eval {$last..1000}) ; do
   echo "$i" > "$LASTFILE"
   wget -c "$BASE_URL/name_\{$i\}"
done

Вы сказали, что У каждого есть имя "name_ {i}" - я не уверен, означает ли это, что имя файла {} фигурные скобки в них или нет. Если нет, просто удалите \ { и \} из строки wget выше.

Если имена файлов имеют номера с нулями (например, 0005, а не только 5), вы можете использовать seq вместо eval {$ last..1000} следующим образом:

for i in $(seq -w $last 1000); do
...
done
1
27.01.2020, 23:20

Взгляните на опцию lftp mirror:

mirror [OPTS] [source [target]]

 Зеркалирование указанного исходного каталога в локальный целевой каталог. Если целевой каталог заканчивается
 косой чертой (кроме корня), имя базы источника добавляется к имени целевого каталога.
 Источник и/или цель могут быть URL-адресами, указывающими на каталоги.

Дополнительные подробности см. в http://lftp.yar.ru/lftp-man.html.

EDIT

Из руководства:

lftp - это программа передачи файлов, которая позволяет использовать сложные FTP, HTTP и другие соединения с другими хостами. Если указан сайт, то lftp подключится к этому сайту, иначе соединение должно быть установлено с помощью команды open.

 lftp может работать с несколькими методами доступа к файлам - FTP, FTPS, HTTP, HTTPS, HFTP, FISH, SFTP и
 файл (HTTPS и FTPS доступны только в том случае, если lftp скомпилирован с GNU TLS или OpenSSL).
 библиотекой).

lftp можно использовать для получения файлов по HTTP. Попробуйте:

lftp -e "mirror -c" http://url
0
27.01.2020, 23:20

Теги

Похожие вопросы