Как скачать файл в несуществующую директорию с помощью wget?

Рейтинг: 1Ответов: 2Опубликовано: 08.05.2023

Я пытаюсь скачать файл, добавить к его имени расширение .safetensors и переместить его в нужную папку (которой до этого может и не существовать).

Я пробовал:

wget -P /content/gdrive/cron_test/ https://civitai.com/api/download/models/43888 --output-document=newfile.safetensors
wget -P /content/gdrive/cron_test/ -O newfile.safetensors  https://civitai.com/api/download/models/43888

Ошибки нет, но файл оказывается в /content/newfile.safetensors, а нужно, чтобы он был в /content/gdrive/cron_test/newfile.safetensors.

wget -P /content/gdrive/cron_test/newfile.safetensors https://civitai.com/api/download/models/43888

В итоге получается вот так /content/gdrive/cron_test/newfile.safetensors/43888.

wget -O /content/gdrive/cron_test/newfile.safetensors https://civitai.com/api/download/models/43888

/content/gdrive/cron_test/newfile.safetensors: No such file or directory

mkdir  /content/gdrive/cron_test/
wget -O /content/gdrive/cron_test/newfile.safetensors https://civitai.com/api/download/models/43888

/content/gdrive/cron_test/: No such file or directory

Что нужно сделать, чтобы переместить файл в каталог и поменять его расширение?

Ответы

▲ 2

Чтобы создать не одну, а несколько вложенных друг в друга директорий, необходимо использовать команду mkdir c флагом -p (то же, что и флаг -⁠-⁠parents).

Например:

mkdir -p a/b/c

Теперь можно скачивать файл в эту директорию при помощи wget с опцией -O (то же самое, что и опция -⁠-⁠output-document=):

wget <url> -O a/b/c/newfile.safetensors

Опция -P (она же -⁠-⁠directory-prefix=) игнорируется, если задана опция -O, поэтому не нужно их использовать одновременно.

▲ 2

Как оказалось параметр программы wget -x не создает каталоги пользователя, а повторяет вложенность файла с сайта.
Спасибо Vadik Sirekanyan за разъяснение.


От себя предложу вариант с curl хоть его и нет в метках, но рассмотреть возможность реализации с его помощью все же возможно:

Параметры запуска:

  • -o, --output FILE - Write output to instead of stdout
  • --create-dirs - Create necessary local directory hierarchy

пример строки для запуска:

curl https://civitai.com/api/download/models/43888 -o /content/gdrive/cron_test/newfile.safetensors --create-dirs