Запишите вывод wget или завихрения к пользовательскому имени файла на основе URL

Кажется, что это просто не возможно.

12
11.08.2014, 08:31
5 ответов

curl имеет -o, --output опция, которая берет отдельный аргумент, указывающий на вывод имени файла, должна быть записана во вместо stdout. Если Вы используете {} или [] для окружения элементов в URL (обычно раньше выбирал несколько документов) можно использовать # сопровождаемый числом в спецификаторе имени файла. Каждая такая переменная будет заменена соответствующей строкой для выбираемого URL. Для выборки нескольких файлов добавьте разделенный запятыми список маркеров в {}. Если части URL, который будет выбран, являются порядковыми номерами, можно указать диапазон с [].

Примеры:

  curl http://www.abc.com/123/{def}/{ghi}/{jkl}.mno -o '#1_#2_#3.mno'

Отметьте кавычки вокруг аргумента опции (не нужный, если имя файла не запускается с одной из расширенных переменных).This, должен привести к выходному файлу def_ghi_jkl.mno.

  curl http://www.abc.com/123/{def}/{ghi}/{jkl,pqr,stu}.mno -o '#1_#2_#3.mno'

Это должно привести к выходным файлам def_ghi_jkl.mno, def_ghi_pqr.mno и def_ghi_stu.mno.

 curl http://www.abc.com/123/{def}/{ghi}/[1-3].mno -o '#1_#2_#3.mno'

Это должно привести к выходным файлам def_ghi_1.mno, def_ghi_2.mno, def_ghi_3.mno.

14
27.01.2020, 19:55

wget имеет переключатель -O (подробная форма --output-document) который позволяет Вам указывать название файла для сохранения к. (По-видимому, завихрение имеет что-то подобное.), Таким образом, Вы могли сделать:

wget -O def_ghi_jkl.mno http://www.abc.com/123/def/ghi/jkl.mno

и это сделает то, что Вы хотите.

Вы могли, вероятно, создать обертку вокруг wget, если бы Вы хотите автоматизировать эту схему именования, но это было бы довольно твердо стать пуленепробиваемым и определенно вне объема этого ответа. (В простом случае единственного файла, загруженного с явного URL, не должно быть очень трудно разобраться, но это не единственный режим работы wget. Для именования всего одного случая, который делает это немного нетривиальным можно указать несколько URL на командной строке.)

Отметьте это -O не то же вообще как -o, какой собственный вывод wget записи в именованный файл.

2
27.01.2020, 19:55
  • 1
    Это - часть сценария, явного имени файла предоставления как эта работа привычки. –  gvz 20.09.2013, 12:56
  • 2
    @user47567, Почему нет? Что относительно того, что wget или завихрение называют из сценария, делает это непрактичным? (И действительно, если у Вас есть такие ограничения на то, какие ответы будут работать, та информация должна действительно вникнуть в вопрос с начала.) –  a CVn 20.09.2013, 14:09

Вот Некоторый прием Замены Bash

link="http://www.abc.com/123/def/ghi/jkl.mno"
OutputFile=$( echo ${link:23: 23}| tr "/" "_" )
echo $OutputFile
def_ghi_jkl.mno

{$link:23: 23} удалит "http://www.abc.com/123/", который это ${parameter:offset:length}, затем tr заменит / кому: _.

Таким образом, теперь можно легко использовать с wget или завихрением

wget $link  -O $OutputFile

Также мы можем использовать awk, это извлечет последние три, зарегистрированные из входной строки:

OutputFile=$( echo $link | awk -F/ 'BEGIN{OFS="_"}{ print $( NF-2),$(NF - 1 ),$NF}' )
0
27.01.2020, 19:55

Имя файла, которое вам нужно, не может быть выведено самим wget, поэтому его нужно обработать с помощью скрипта оболочки:

$ url='http://www.example.com/123/def/ghi/jkl.mno'
$ outFile=$(echo "$url" | cut -d /  -f 5- | tr / _)
$ echo $outFile 
def_ghi_jkl.mno
$ wget "$url" -O "$outFile"

или, если вам нравится, в одну строку:

wget "$url" -O "$(echo "$url" | cut -d /  -f 5- | tr / _)"
0
27.01.2020, 19:55

Если вы предпочитаете завитки, самый прямой способ:

curl -L -o <filename> "https://drive.google.com/uc?export=download&id=<file id>"

имя файла :имя загруженного файла

идентификатор файла :идентификатор файла в веб-представлении Google Диска в форматеhttps://drive.google.com/file/d/идентификатор файла /представление

2
27.01.2020, 19:55

Теги

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