使用 wget 时 URL 中的通配符

Wildcard in URL while using wget

我正在尝试使用以下命令通过 shell 将整个文件从 S3 复制到 HDFS:

wget https://export.xyz.com/Disabilities/*/*/*/*_0620.csv.zip 

我收到错误:错误 404:未找到 当我使用一个特定文件的 URL 时,能够复制。

请告诉我如何在 URL 中使用通配符。

你不能。使用通配符仅适用于已知所有可能性的情况:

  • 在 shell 中,操作系统已经知道目录中的所有文件:发布 ls *.log 仅有效,因为它可以与出现的所有文件名相匹配。
  • 在 SQL 中,DBMS 已经知道 table 的所有 table 列和所有数据行:发布 SELECT * FROM people WHERE name LIKE '%Rogers' 仅有效,因为所有 table的列名已经可用,因为过滤器可以与所有存在的行匹配。
  • 在正则表达式中,要操作的文本已经是需要知道的所有内容:搜索 p+ 只有效,因为它的部分可以匹配,即 opposing forces.

统一资源定位器 (URL) 永远不能有通配符,因为那样它就不再是统一的了。 WGET(或任何其他 HTTP 客户端)应该如何知道哪些可能性可以填充到潜在的通配符占位符中?更不用说 * 是你的意思是通配符而不是 URI 的文字部分?您基本上是在询问“互联网上存在哪些 URL”,我想知道您期望哪个答案。

您必须想出所有排列您自己,即 WGET 然后可以处理的所有 URL 的列表:

https://export.xyz/Disabilities/NY/NYC/0620/file_0620.csv.zip
https://export.xyz/Disabilities/NY/NYC/0720/file_0620.csv.zip
https://export.xyz/Disabilities/NY/NYC/0820/file_0620.csv.zip

毫无疑问,这个列表可能非常大并且包含 URL 确实不存在(并且逻辑上永远不会存在),因为它会简单地以 HTTP 状态 404 的形式出现 - 你会的浪费一点点流量和时间。

wget -r --no-parent -A '*_0620.csv.zip' https://export.xyz.com/Disabilities/

可能有用,我不是 100% 确定。 -A 设置可接受参数列表,您可能还必须接受目录模式。