根据 url 将 wget 或 curl 的输出写入自定义文件名

根据 url 将 wget 或 curl 的输出写入自定义文件名

例如我有一个链接http://www.abc.com/123/def/ghi/jkl.mno。我想使用wgetor下载它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.mnodef_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 / _)"

相关内容