我正在使用脚本来查找 url 上所有 .pdf 文件的列表。但 lynx 似乎在文件名中存在空格问题。这是脚本:
lynx --dump http://www.somesite/here/ | awk '/http/{print $2} | grep pdf > ~/Desktop/links.txt
这将按预期工作,直到文件名中出现带有空格的 .pdf。 Lynx 似乎在空白处截断了文件名。有什么办法可以防止这种情况吗?
答案1
awk(默认情况下)使用空白作为字段分隔符,lynx 将转储的 url 中的空白渲染为空白。按照我在错误报告中建议的方式解决这个问题:
lynx -listonly -dump http://www.somesite/here/ | lynx -listonly -dump http://www.somesite/here/ | \ awk '/\.pdf$/{ sub("^[ ]*[0-9]+.[ ]*","",$0);打印}' > ~/Desktop/links.txt
如果内容恰好是 UTF-8 编码,lynx逃逸文本(撤消 URL 编码,例如%20
),在本例中显示一个空格(为 awk 提供两个或多个字段,具体取决于名称中空格的数量)。
Debian 已完成转义#398274,2013 年(即 Ubuntu 18.04 已具备该功能)。
添加-listonly
选项减少了错误匹配的数量,通过只查看列表网址。
如果您想查找多种文件类型,您可以在正则表达式中列出后缀作为替代项,例如,如下所示:
awk '/\.(pdf|odt|doc|docx)$/{ sub("^[ ]*[0-9]+.[ ]*","",$0);打印}' > ~/Desktop/links.txt