Answers:
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.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
。
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自身的输出写入命名文件。
这是一些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}' )
如果您喜欢卷曲,最直接的方法是:
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