将wget或curl的输出写入基于URL的自定义文件名


12

例如,我有一个链接http://www.abc.com/123/def/ghi/jkl.mno。我想使用wget或下载它,curl并获取输出文件的名称为def_ghi_jkl.mno,其中该部分def_ghi来自链接。

我将把此wget命令放在脚本中以下载多个文件,这样它就不能显式给出输出文件名。

Answers:


15

curl-o--output 选择这需要指示所述文件名输出一个参数应写入的代替stdout。如果您正在URL 中使用元素{}[]将其括起来(通常用于获取多个文档),则可以#在文件名说明符中使用后跟数字。每个这样的变量将被获取的URL的相应​​字符串替换。要获取多个文件,请在中添加以逗号分隔的令牌列表{}。如果要提取的部分网址是序号,则可以使用来指定范围[]

例子:

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

注意选项参数周围的引号(除非文件名以扩展变量之一开头,否则不需要),这应导致输出文件def_ghi_jkl.mno

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

这将导致在输出文件def_ghi_jkl.mnodef_ghi_pqr.mnodef_ghi_stu.mno

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

这将导致在输出文件def_ghi_1.mnodef_ghi_2.mnodef_ghi_3.mno


2

wget有一个开关-O(长格式--output-document),它允许您指定要保存到的文件的名称。(大概curl有类似的东西。)因此,您可以执行以下操作:

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

它会做您想要的。

如果要自动执行此命名方案,则可以围绕wget创建包装器,但是要获得防弹效果相当困难,而且绝对超出了此答案的范围。(从显式URL下载单个文件的简单情况并不难,但这并不是wget唯一的操作方式。仅举一种情况,这可以使这个问题变得微不足道,您可以指定多个URL在命令行上。)

请注意,-O这与完全不同-o,后者将wget自身的输出写入命名文件。


这是脚本的一部分,像这样的显式给出文件名是行不通的。
gvz

@ user47567为什么不呢?从脚本调用wget或curl的事实使这变得不切实际吗?(实际上,如果您对有效的答案有这样的限制,那么信息应该从一开始就真正成为问题。)
CVn 2013年

0

这是一些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或curl

wget $link  -O $OutputFile

我们也可以使用awk,这将从输入字符串中提取最后三个文件:

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

0

您所需的文件名不能由其wget本身派生,因此需要由shell脚本处理:

$ 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

如果您喜欢卷曲,最直接的方法是:

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

filename:下载文件的名称

文件ID:Google驱动器网络视图中文件的ID,格式为https://drive.google.com/file/d/ 文件ID / view

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.