我不清楚如何使用 来获取多个文档,主要是因为我不完全理解文档curl
中的解释curl
卷曲文档说:
-o, --output <file> Write output to <file> instead of stdout. If you are using {} or [] to fetch multiple documents, you can use '#' followed by a number in the <file> speci‐ fier. That variable will be replaced with the current string for the URL being fetched. Like in: curl http://{one,two}.example.com -o "file_#1.txt" or use several variables like: curl http://{site,host}.host[1-5].com -o "#1_#2"
curl
上述引用块中的“变量”指的是命令的哪一部分?块引用显示您可以使用以下命令指定多个 URL 供curl 获取:
http://{one,two}.example.com
。使用是否{}
会导致上面的完整 URL 扩展为:
http://one.example.com
http://two.example.com
beforecurl
的 fetch 操作开始?
该curl
文档还指出:
or you can get sequences of alphanumeric series by using [] as in: ftp://ftp.example.com/file[1-100].txt ftp://ftp.example.com/file[001-100].txt (with leading zeros) ftp://ftp.example.com/file[a-z].txt
- 我猜
[]
也像这样执行扩展,{}
但是远程文件名必须准确吗file1, file2, file3, ... file100
? iefile[1-100].txt
仅适用于具有编号序列的文件名,例如,file[1-100].txt
如果我们在该 URL 处file1, file2, file3,... file100
拥有文件,那么 using 仍然有效吗?file 1, file3 file5 ... file99
- 即使curl文档建议通过用双引号括住完整的URL来 保护或免受shell扩展,是否使用
[]
或与shell扩展相同?:{}
[]
{}
When using [] or {} sequences when invoked from a command line prompt, you probably have to put the full URL within double quotes to avoid the shell from interfering with it. This also goes for other characters treated special, like for example '&', '?' and '*'.
答案1
许多问题合而为一...
- 上述块引用中的“variable”指的是curl命令的哪一部分?
是#1
变量#2
- 在curl的获取操作开始之前,使用是否
{}
会导致上面的完整URL扩展[...]?
是的,这就是像 shell 所做的大括号扩展,但受引号保护,因此curl
可以执行扩展。 - 我猜
[]
也像这样执行扩展,{}
但是远程文件名必须准确吗file1, file2, file3, ... file100
?
不,您还可以提供一个步数计数器,例如file[1-99:2]
您的示例 - 即使curl文档建议通过用双引号括住完整的URL来保护[]或{}免受shell扩展,但使用
[]
或与shell扩展相同吗?{}
语法{}
与大括号扩展相同,但序列扩展不同。原因是,为什么你需要保护它:如果 shell 已经进行了扩展,那么如何curl
知道变量应该是什么?如果 shell 展开http://{one,two}.foo.com
,curl
会看到http://one.foo.com
和http://two.foo.com
,但看不到变量。如果它看到受保护的原始变量,它就知道第一个变量#1
是one
或two
。