【问题标题】:Reject a download below a minimum size in a bash script在 bash 脚本中拒绝低于最小大小的下载
【发布时间】:2021-02-23 14:51:00
【问题描述】:

我正在使用 wget 下载文件(curl 也可以),

wget somesite.com/files/{1..1000}.txt

我只想下载大于最小尺寸的文件。文件大小是我可以用来确定是否需要该文件的唯一标准,文件名不是描述性的,并且都具有相同的扩展名。
据我了解,当向服务器发出请求时,它会在下载开始之前返回文件的大小,因此应该可以拒绝文件而无需下载。

是否有 wget 或 curl 可以做到这一点的标志,或者添加此功能的脚本?我发现了两个类似的问题,herehere 分别用于 curl 和 wget,但都没有满足这些要求的答案。我希望避免下载文件然后拒绝它。

Alternativley,我可以使用另一种基于终端的工具来做到这一点吗?

【问题讨论】:

  • 只获取标题:wget -S --spider URL 2>&1 | awk '/Content-Length:/{print $2}'?

标签: bash shell curl wget


【解决方案1】:

或者,我可以使用其他基于终端的工具来执行此操作吗?

是的,你可以看看

$ xidel -s --method=HEAD https://www.somesite.com/files/{1..1000}.txt \
  -f '$url[substring-after($headers,"Content-Length: ") gt 51200]' \
  --download .
  • --method=HEAD 阻止读取这些文本文件的全部内容。
  • -f "follows" / 打开 url 的内容。在这种情况下,只有那些$urls,例如,大于 50KB(51200 字节)。
  • --download 将这些文本文件下载到当前目录。

或者,您可以使用提取查询来完成所有操作:

$ xidel -se '
  for $x in (1 to 1000) ! x"https://www.somesite.com/files/{.}.txt"
  where substring-after(
    x:request({"method":"HEAD","url":$x})/headers,
    "Content-Length: "
  ) gt 51200
  return
  x:request({"url":$x})/file:write-binary(
    extract(url,".+/(.+)",1),
    string-to-base64Binary(raw)
  )
'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    相关资源
    最近更新 更多