使用 WGET 从索引中提取所有文件名

使用 WGET 从索引中提取所有文件名

我在一所大学工作,我想提取我们拥有的所有 PDF 目录的所有文件名并制作一个文本文件。这些 PDF 均位于 Intranet 索引中。 WGET 在 Intranet 上工作得很好,我知道如何使用它从该索引下载一堆文件。然而,我正在对我们的目录进行审核,我需要每个目录的文件名 - 不是实际的 PDF 文件,只是“UniOfState0708.pdf”。

所有的 PDF 都位于不同的目录中,因此 /catalog/ 的 Indox 具有 UniOfStateA/、UniOfStateB/ 等目录,每个索引中都有 PDF,这些是我想要收集的名称。

WGET 可以做到这一点吗?如果可以的话我该怎么做?

答案1

以下解决方案仅适用于未格式化的标准apache2生成的目录索引。您可以wget索引文件并使用以下命令解析grepcut

#this will download the directory listing index.html file for /folder/
wget the.server.ip.address/folder/   

#this will grep for the table of the files, remove the top line (parent folder) and cut out
#the necessary fields
grep '</a></td>' index.html | tail -n +2 | cut -d'>' -f7 | cut -d'<' -f1

请注意,如上所述,只有当目录列表是由apache2具有基本选项的服务器生成时才有效,配置如下:

<Directory /var/www/html/folder>
 Options +Indexes 
 AllowOverride None
 Allow from all
</Directory>

在此配置中,wget将返回index.html没有任何特定格式的 ,但当然也可以使用选项自定义目录列表:

IndexOptions +option1 -option2 ...

为了提供更准确的答案(如果具体的话适合您的情况),我们需要一个示例index.html文件。

这里还有一个 Python 版本:

from bs4 import BeautifulSoup
import requests

def get_listing() :
  dir='http://cdimage.debian.org/debian-cd/8.4.0-live/amd64/iso-hybrid/'
  for file in listFD(dir):
    print file.split("//")[2]

def listFD(url, ext=''):    
  page = requests.get(url).text
  print page
  soup = BeautifulSoup(page, 'html.parser')
  return [url + '/' + node.get('href') for node in soup.find_all('a') if node.get('href').endswith(ext)]

def main() :
  get_listing()


if __name__=='__main__' : 
  main()

用作指南这一页

相关内容