在linux中生成一个目录列表作为webserver索引页



我正在使用

python -m SimpleHTTPServer 8080

从linux目录启动Web服务器。我正在尝试编写一个shell脚本,该脚本生成一个包含以下信息的index.html页面:文件名(作为超链接(、文件大小、上次修改日期。所以实际上是一个自定义目录列表。

这是一个脚本,它当前获得了正确的信息,但在一行中显示了所有信息,并且没有超链接文件名。有人能告诉我正确的方向吗?

    TITLE="Latest Logs"
    echo "<html>" > index.html
    echo "<title>$TITLE</title>" >> index.html
    echo "<body>" >> index.html
    echo "<h1>$TITLE</h1>" >> index.html
    ls -ctgGh | awk '{print $3 " " $4 " " $5 " " $6 " " $7}' 
    | grep -v index.html 
    | sed 's/[^0-9s]+[.][^0-9s]+/<a href="&">&</a><br/>/g' 
    >> index.html
    echo "</body></html>" >> index.html

因此,我要输入sed的是:

374,11月6日,04:03,生成.sh
11月6日上午7点50分,管理员服务器日志
46M,11月6日03:48,run1.log
528K,11月4日15:03,build.log

我想得到:

375,Nov 6,04:14,<a href=generate.sh>generate.sh</a>
7.5M,Nov 6,04:09,<a href=Admin-Server.log>Admin-Server.log</a>
46M,Nov 6,03:48,<a href=run1.log>run1.log</a>
528K,Nov 4,15:03,<a href=build.log>build.log</a>

我认为您的第一个更改不应该是将输出文件名硬编码到脚本中。只需正常输出到标准输出,并且在调用脚本时使用重定向。

例如,您的线路

echo "<html>" > index.html

应该只是

echo "<html>"

但是当你调用脚本时,可以这样调用它:

my-script > index.html

shell会将输出放入正确的文件中。(如果您想将输出放入测试文件中,这在测试时也很有用。(

假设您使用的是sh,您可能应该以一个"shebang"开始您的脚本:

#!/bin/bash

作为第一行。有关详细信息,请参阅《高级Bash脚本指南》。

一旦你做到了,你就不需要了

grep -v index.html

因为它不应该出现在脚本的环境中。

在您的示例输入中,您有逗号,但在现实世界中,它们将是空格。不是问题,只是对问题的修正。

使用awk,可以使用逗号(而不是" "(用空格分隔字段。它会更易读。并且不要使用sed;没有必要。您可以使用awk:进行所有更改

awk '{print $3, $4, $5, $6, "<a href=" $7 ">" $7 "</a>"}'

应该做到这一点。

因此,脚本中的引擎将仅由管道连接到awkls组成,echo为输出提供一些结构;当您使用脚本时,重定向将负责将其放入文件中。

#!/bin/sh
TITLE="Latest Logs"
echo "<html>" > index.html
echo "<title>$TITLE</title>" >> index.html
echo "<body>" >> index.html
echo "<PRE>" >> index.html
echo "<h1>$TITLE</h1>" >> index.html
ls -lrt | grep -v index.html | awk '{print $3, $4, $5, $6, "<a     href=http://10.77.28.119:9090/"$9 "<a>" $9 "</a>"}' >> index.html
echo "</pre>" >> index.html
echo "</body></html>" >> index.html

上面的代码生成了一个index.html文件,当从浏览器页面调用时,该文件将显示目录中的所有文件。您可以将ip地址替换为web服务器的ip地址和端口。

相关内容

  • 没有找到相关文章

最新更新