【问题标题】:CURL cuts off URL after 74 charactersCURL 在 74 个字符后截断 URL
【发布时间】:2015-08-11 02:00:16
【问题描述】:

我正在编写一个脚本,该脚本将大约 300 个 URL 的列表作为输入,其格式如下: http://long.domain.prefix/folder/subfolder/filename.html

在那个 URL 中,我想保存 filename.htmlin ./folder/subfolder/ - 如果该文件夹结构不存在,则必须创建它。这可行,文件夹正在写入磁盘,但没有下载文件。

我的脚本如下所示:

#!/bin/bash

for line in `cat list.txt`; do

  # strips the URL prefix and trailing slash
  name=${line#http://long.domain.prefix\/}
  /usr/bin/curl -m 10 -f -o $name --create-dirs $fullname

done;

由于某种原因,$name 变量恰好在 74 个字符后被截断,这显然会导致 HTTP 错误代码。我无法提供确切的 URL,但请确保它们是正确的,只要使用的是完整的 URL。

如何防止这种奇怪的切断行为?

【问题讨论】:

  • URL 中的第 75 个字符是否有任何“奇怪”(如空格、分号或 & 符号)? (另请参阅 mywiki.wooledge.org/DontReadLinesWithFor 和链接页面,了解为什么 for line in $(cat list.txt) 是一个坏主意。)您还应该引用变量以防止在值上出现分词、通配等问题(并避免我之前建议的问题。跨度>
  • 如果您将set -x 添加到脚本顶部并在循环内添加printf 'line = [%s]\nname = [%s]\n' "$line" "$name",您是否看到在curl 命令行上正确使用了url,并且printf 输出了您期望的内容每个变量?
  • 如果您将--trace-ascii 添加到curl 调用中,传出请求是否具有完整的URL,或者它是否已经被截断?在printf 格式字符串中使用%q 而不是%s 是否显示任何控制/等。平时看不到的字符?
  • 这看起来不正确,请注意关闭 ] 和变量扩展中的 \r 的位置?该输入文件具有 DOS 行尾。这本身并不能解释 74 个字符的问题,尽管我不认为但不会有任何帮助。我会解决这个问题,看看你会得到什么。
  • 该输出的内容中仍然包含\r。此外,该输出将表明您的参数扩展并未按照您希望的方式从文件名中剥离域。

标签: macos bash shell curl download


【解决方案1】:

感谢 Etan Reisner,解决方案是将文件转换为 Unix 风格的行尾。

【讨论】:

    猜你喜欢
    • 2013-02-06
    • 1970-01-01
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    • 2019-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多