【问题标题】:generating a directory listing as webserver index page in linux在 linux 中生成目录列表作为网络服务器索引页面
【发布时间】:2011-12-22 23:11:23
【问题描述】:

我正在使用

python -m SimpleHTTPServer 8080

从 linux 目录启动网络服务器。我正在尝试编写一个 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,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>

【问题讨论】:

    标签: linux shell scripting sed simplehttpserver


    【解决方案1】:

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

    比如你的线路

    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>"}'
    

    应该可以解决问题。

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

    【讨论】:

    • 您关于使用 awk 的建议为我节省了很多时间。我摆脱了 sed 和 awk 为我做了这一切。谢谢!
    【解决方案2】:
    #!/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
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2013-08-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-20
        • 2021-06-14
        • 1970-01-01
        • 2020-05-16
        相关资源
        最近更新 更多