在wget递归下载过程中搜索文件

4
我正在尝试使用wget -m递归下载多个文件,并且我打算在所有已下载的文件中使用grep查找特定文本。目前,我可以等待wget完全完成,然后运行grep。但是,由于有很多文件,wget进程很耗时,因此我希望在每个文件下载时即时进行grep并将其打印到stdout中,然后再下载下一个文件。
例如:
download file1
  grep file1 >> output.txt
download file2
  grep file2 >> output.txt
...

感谢您对如何实现此操作提出的任何建议。


wget http://google.com -O - | grep "string" 使用wget命令下载http://google.com的内容,并通过管道将其传递给grep命令,以查找包含“string”的行。 - c4f4t0r
我刚刚测试了一下,当我将“-O”设置为文件时,递归/ grep 似乎可以工作,但是当我使用“-O -”时,它会在第一个文件后停止。 - RogueBaneling
1
是的,这可以使用单个文件工作,但不能使用递归。https://dev59.com/qHjZa4cB1Zd3GeqPfZDp - c4f4t0r
2个回答

1
指出,如下:
 wget -m -O - <wesbites>|grep --color 'pattern'

使用grep的颜色功能来突出显示模式可能会很有帮助,特别是在处理大量数据输出到终端时。
编辑:
以下是您可以使用的命令行。它创建一个名为file的文件,并保存来自wget的输出消息。然后它会跟踪消息文件。
使用awk查找任何包含“saved”的行并提取文件名,然后使用grep从文件名中匹配模式。
 wget -m websites  &> file &  tail -f -n1 file|awk -F "\'|\`"  '/saved/{system( ("grep  --colour pattern ") $2)}'

-mO不起作用,因为wget找不到下一个链接以进行递归下载。 - RogueBaneling
@RogueBaneling 嗯...有趣...回答已编辑,显示了你可以使用的命令行。 - repzero
我对这个进行了一些尝试,并成功地使用以下命令使它工作:wget -m -O file.txt http://google.com 2> /dev/null & sleep 1 && tail -f -n1 file.txt | grep pattern。最初 tail 命令没有起作用,我认为这是因为在 tail 执行时还未创建 file.txt 文件,所以我添加了 sleep 命令。 - RogueBaneling

1

基于Xorg的解决方案,我进行了一些微小的调整,最终实现了我想要的效果:

wget -m -O file.txt http://google.com 2> /dev/null & sleep 1 && tail -f -n1 file.txt | grep pattern

这将打印出所有包含“pattern”的行到标准输出,并且“wget”本身不会在终端上产生任何可见的输出。包含“sleep”的原因是,否则“file.txt”将不会在“tail”命令执行时创建。

请注意,此命令将错过“wget”在第一秒内下载的任何结果。


太好了!找到解决方案加一。 - repzero

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接