Скачать файлы (игровые моды) с сайта

prenameподход:

prename -n 's/.*_(week.*$)/$1/' *_week*.pdf
  • $1-указывает на 1-ю захваченную группу
-2
30.01.2020, 23:41
1 ответ

https://www.transportfever.net/filebase/index.php?filebase/80-transport-fever-2/предоставляет ссылку на самый новый файл. Можно загрузить html-документ сайта с помощью curl, направить вывод для извлечения ссылки для загрузки (, сделанной ненадежным способом ниже с помощью grep), и с помощью подстановки команд передать эту ссылку второму curlкоманда.

curl -OJ \
    $(curl -fs \
    'https://www.transportfever.net/filebase/index.php?filebase/80-transport-fever-2/' | \
    grep -om1 '[^"]*entry-download/[^"]*')

Надеюсь, это даст вам основу для дальнейшего развития.


grepиспользуемые варианты:

  • -o/ --only-matchingдля вывода только совпадающего шаблона вместо всей строки, содержащей шаблон
  • -m 1/ --max-count=1прекращает поиск ввода после первой строки, содержащей совпадение

  • Шаблон для сопоставления:[^"]*entry-download/[^"]*:все ссылки для скачивания, по-видимому, даны с href="https://www.transportfever.net/filebase/index.php?entry-download/<number><...>"- поэтому приведенное выше сопоставление с шаблоном кажется достаточным :ноль или более любых символов, кроме двойных кавычек ", за которыми следует entry-download/, за которым снова следует ноль или более чего-либо, кроме"

curlиспользуемые опции (первый проход — внутри подстановки):

  • -f/ --failничего не выводить, если мы получили4/5xxhttp-ответ — запрос не удался, мы не хотим выполнять grep html-документ, который сообщает нам, что он не удался
  • -s/ --silentэто первый проход,мы не хотим видеть индикатор выполнения или что-то в этом роде

параметры второго прохода curl— эти ссылки для скачивания используют заголовок content-disposition, чтобы сообщить нам имя файла, поэтому:

  • -O/ --remote-nameсохранить файл под тем же именем, что и удаленный файл
  • -J/ --remote-header-nameпозволяет параметру -Oиспользовать указанный сервер -Контент -Имя файла диспозиции вместо извлечения имени файла из URL-адреса

На самом деле существует более одной ссылки entry-download/— чтобы загрузить все ссылки, мы можем удалить -m1из grepи настроить вторые параметры curlдля использования --remote-name-all, например:

curl --remote-name-all -J \
    $(curl -fs \
    'https://www.transportfever.net/filebase/index.php?filebase/80-transport-fever-2/' | \
    grep -o '[^"]*entry-download/[^"]*')

Проверка конфликтов файлов:

Если мы хотим заранее узнать имя файла, описанное заголовком content-disposition, потребуется дополнительный шаг. Мы можем использовать curl для отправки запроса head:

# get first url from the page, storing it to
# the parameter 'url' so we can use it again later
url=$(curl -fs \
    'https://www.transportfever.net/filebase/index.php?filebase/80-transport-fever-2/' | \
    grep -om1 '[^" ]*entry-download/[^" ]*')

# head request to determine filename
filename=$(curl -Is "$url" | grep -iom1 '^content-disposition:.*filename="[^"]*' | grep -o '[^"]*$')

# 'if' statement using the 'test' / '[' command as the condition
if test -e "$filename"; then
    echo "$filename exists!"
else
    # a file named $filename doesn't exit,
    # so we'll download it
    curl -o "$filename" "$url"
fi
  • это простой пример, который проверяет наличие конфликтующего файла перед попыткой загрузки
  • на самом деле не нужен, так как curl -Jне будет перезаписывать существующие файлы, но я подозреваю, что вы хотите проверить наличие "$filename"— возможно, без.zip:"${filename%.zip}"— в каком-то другом каталоге или, может быть, в каком-то тексте файл

Основываясь на вышеизложенном, если вы хотите сделать это для всех извлеченных entry-download/URL-адресов:

# extract all urls, placing them in an array parameter 'urls'
urls=( $(curl -fs \
    'https://www.transportfever.net/filebase/index.php?filebase/80-transport-fever-2/' | \
    grep -o '[^" ]*entry-download/[^" ]*') )

# loop over extracted urls
for i in "${urls[@]}"; do
    # do filename extraction for "$i"
    # use filename to determine if you want to download "$i"
done
1
28.04.2021, 23:25

Теги

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