Shell脚本创建静态HTML目录列表 [英] shell script to create a static HTML directory listing
问题描述
因此,我正在创建一个GitHub Pages站点,以在我的 jglovier/gifs 中列出所有Gif.回购.GH Pages仅运行静态HTML/CSS/JS或Jekyll,因此我不能使用apache目录列表或任何其他服务器生成的变体.
So I'm creating a GitHub Pages site to list all of the Gifs in my jglovier/gifs repo. GH Pages runs only static HTML/CSS/JS or Jekyll, so I cannot use an apache directory listing or any other server generated variant.
所以我想做的是在命令行上运行一个脚本,并让它浏览目录的根目录,列出其中的所有文件(仅深入一层),然后将其输出到html ul>&
结构或与此类似的东西:
So what I'd like to do is run a script on the command line and have it browse the root for directories, list all the files inside (which only go one level deep), and output that to an html ul > li > a
structure, or something similar to this:
root/
|
├── accidents/
| ├── accident2.gif
| ├── accident3.gif
| └── accident4.gif
├── bears/
| ├── bears1.gif
| ├── bears2.gif
| └── bears3.gif
└── cats/
├── cat1.gif
├── cat2.gif
└── cat3.gif
我希望href值是站点根目录的相对路径(即 href ="/cats/cat
.gif ),我需要将其输出到
_includes/site-index.html ,它将被拉入一个Jekyll布局文件中,该文件环绕我的
index.md 文件并在构建时生成
index.html`.
I'd like the href values to be site-root relative paths (i.e. href="/cats/cat
.gif), and I need it to output into
_includes/site-index.html, which will get pulled into a Jekyll layout file that wraps around my
index.mdfile and generates
index.html` on build.
我找到了另一个问题,这非常相似,并尝试实现它的答案以达到我的目的,但是可惜我实在是壳n00b太多了,无法靠我自己完成它.
I found this other question which is very similar, and tried to implement it's answer for my purposes, but alas I'm too much of a shell n00b to accomplish it on my own.
推荐答案
#!/bin/bash
ROOT=/tmp/test
HTTP="/"
OUTPUT="_includes/site-index.html"
i=0
echo "<UL>" > $OUTPUT
for filepath in `find "$ROOT" -maxdepth 1 -mindepth 1 -type d| sort`; do
path=`basename "$filepath"`
echo " <LI>$path</LI>" >> $OUTPUT
echo " <UL>" >> $OUTPUT
for i in `find "$filepath" -maxdepth 1 -mindepth 1 -type f| sort`; do
file=`basename "$i"`
echo " <LI><a href=\"/$path/$file\">$file</a></LI>" >> $OUTPUT
done
echo " </UL>" >> $OUTPUT
done
echo "</UL>" >> $OUTPUT
我的/tmp/test
My /tmp/test
/tmp/test
├── accidents
│ ├── accident2.gif
│ ├── accident3.gif
│ └── accident4.gif
├── bears
│ ├── bears1.gif
│ ├── bears2.gif
│ ├── bears3.gif
│ └── bears4.gif
└── cats
├── cats1.gif
└── cats2.gif
结果输出
<UL>
<LI>accidents</LI>
<UL>
<LI><a href="/accidents/accident2.gif">accident2.gif</a></LI>
<LI><a href="/accidents/accident3.gif">accident3.gif</a></LI>
<LI><a href="/accidents/accident4.gif">accident4.gif</a></LI>
</UL>
<LI>bears</LI>
<UL>
<LI><a href="/bears/bears1.gif">bears1.gif</a></LI>
<LI><a href="/bears/bears2.gif">bears2.gif</a></LI>
<LI><a href="/bears/bears3.gif">bears3.gif</a></LI>
<LI><a href="/bears/bears4.gif">bears4.gif</a></LI>
</UL>
<LI>cats</LI>
<UL>
<LI><a href="/cats/cats1.gif">cats1.gif</a></LI>
<LI><a href="/cats/cats2.gif">cats2.gif</a></LI>
</UL>
</UL>
您也可以使用href扩展UL,但是我不确定这是否就是您想要的.
You could expand the UL with href too, but I wasn't sure if that's what you wanted.
echo " <UL><a href=\"/$path\">$path</a>" >> $OUTPUT
您必须在_includes的父文件夹中运行它
You would have to run this in the parent folder of _includes
这篇关于Shell脚本创建静态HTML目录列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!