1

我在用

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,11 月 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,构建。日志

我想得到:

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>
4

3 回答 3

3

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

例如,您的线路

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

应该做的伎俩。

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

于 2011-11-06T09:06:10.773 回答
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
于 2015-09-22T09:18:56.710 回答
0

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

于 2015-09-23T17:09:10.180 回答