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

时间:2011-11-06 07:10:13

标签: linux shell scripting sed simplehttpserver

我正在使用

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-9\s]+[.][^0-9\s]+/<a href="&">&<\/a><br\/>/g' \
    >> index.html
    echo "</body></html>" >> index.html

所以我在sed中输入的是:

  

374,Nov 6,04:03,generate.sh
  7.5M,11月6,04:00,Admin-server.log
  46M,Nov 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>

3 个答案:

答案 0 :(得分:3)

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

例如,您的行

echo "<html>" > index.html

应该只是

echo "<html>"

但是当您调用脚本时,请按以下方式调用它:

my-script > index.html

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

假设你正在使用sh,你可能应该用“shebang”开始你的脚本:

#!/bin/bash

作为第一行。有关详细信息,请参阅the Advanced Bash Scripting Guide

一旦你这样做,你就不需要

grep -v index.html

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

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

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

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

应该这样做。

因此,脚本中的引擎只包含lsawk管道传输,echo为输出提供一些结构;当您使用脚本时,重定向将负责将其放入文件中。

答案 1 :(得分:0)

#!/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

答案 2 :(得分:0)

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