find . -type f -maxdepth 1 | wc -l
Это может вывести список только файлов в текущем каталоге.
Я не знаю ни одного веб-сервера, который поддерживает загрузку с использованием подстановочных знаков, вам придется получать каждый 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
)
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 "$@"