Загрузка нескольких похожих URL-адресов с использованием фигурных скобок

find . -type f -maxdepth 1 |  wc -l 

Это может вывести список только файлов в текущем каталоге.

1
28.09.2015, 03:22
2 ответа

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

Если сохранить как можно больше исходного сценария, это будет примерно так:

#!/bin/sh
orig=$1

var=${orig%.jpg}
var=$(echo "$var" | grep -o "[0-9][0-9]$")

cutten=${orig%[0-9][0-9].jpg}

for i in $(seq 1 $(($var - 1))) ; do
      echo $cutten$i.jpg
done | wget -i -

Здесь используется параметр -i в wget для чтения списка URL-адресов для выборки из файла, в данном случае case stdin, поэтому мы можем просто передать список файлов в wget.

(если вы хотите увидеть, что он будет загружен, прежде чем запускать его, замените wget -i - на cat )

0
28.07.2021, 13:41

http://foo.bar/some-image- {1,2,3} .jpg - синтаксис исходного кода bash для представления списка слов http://foo.bar/some- image-1.jpg , http://foo.bar/some-image-2.jpg , http://foo.bar/some-image-3.jpg . Исходный синтаксис означает, что это что-то, что вы вводите в своем скрипте, а не то, что происходит при раскрытии переменной. echo "$ output" показывает команду, которую вы будете выполнять, а именно

wget http://foo.bar/some-image-{1,2,3}.jpg

Поскольку фигурные скобки недопустимы в URL-адресах, wget кодирует их как % 7B и % 7D . Это не связано с вашей проблемой: сервер просто видит один URL-адрес, содержащий, насколько это касается, URL-адрес, который не относится к существующему файлу.

Вам нужно передать 3 (в моем примере, 20 в вашем) разных URL в командной строке wget. Вы можете использовать eval , чтобы bash анализировал содержимое переменной как исходный код, чтобы использовать функцию расширения фигурных скобок, но было бы проще создать список в первую очередь - это не так. сложнее, чем строить веревку с помощью скоб.

#!/bin/sh
suffix=${1##*[0-9]}
prefix=${1%"$suffix"}
last=${prefix##*[!0-9]}
prefix=${prefix%"$last"}

while [ "$last" -gt 1 ]; do
  last=$((last-1))
  set -- "$prefix$last$suffix" "$@"
done

wget "$@"
0
28.07.2021, 13:41

Теги

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