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