例如我有一个链接http://www.abc.com/123/def/ghi/jkl.mno
。我想使用wget
or下载它curl
并获取输出文件的名称def_ghi_jkl.mno
,其中该部分def_ghi
取自链接。
我将把这个wget
命令放在一个脚本中来下载多个文件,这样它就不能明确给出输出文件名。
答案1
curl
具有-o
,--output
选项,该选项采用单个参数,指示文件名输出应写入而不是stdout
.如果您使用{}
或[]
包围 URL 中的元素(通常用于获取多个文档),则可以#
在文件名说明符中使用后跟数字。每个此类变量都将替换为所获取 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
.
答案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 自己的输出到指定的文件。
答案3
如果你喜欢curl,最直接的方法是:
curl -L -o <filename> "https://drive.google.com/uc?export=download&id=<file id>"
filename:下载的文件的名称
文件ID:Google Drive网络视图中文件的ID,格式为https://drive.google.com/file/d/文件编号/看法
答案4
您需要的文件名本身无法派生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 / _)"