用于文件列表的bash脚本(html输出)

时间:2013-06-16 19:52:18

标签: html bash filelist

我遇到了编写小型bash脚本的问题,该脚本用于根据名称制作html文件列表。 我有一个命名模式INFO1 Bla Bla - INFO2 - INFO3.doc的文件,我希望在输出中有这样的东西:

<li id="INFO1Blabla">
<h5>INFO1 Bla bla</h5>
<p>INFO2</p>
<a href="files/INFO1 - INFO2 - INFO3.doc">download</a>
</li>

我正在尝试使用bash + awk这样做,但是即使在shell中进行测试我也遇到了一些问题,如你所见:

$ ls > list.txt
$ for i in 'cat list.txt'; do awk -F "-" '{print $2}' > list2.txt; done

循环可能是不定式的,导致其工作10分钟。

如果有人可以帮助我,我将非常高兴因为在这种情况下我不能使用php而且我需要使用bash在我身边生成这个...

干杯男人并保重

2 个答案:

答案 0 :(得分:3)

你在找这个吗?:

$ ls -1
INFO1 - INFO2 - INFO3.doc
INFO1 - INFO4 - INFO6.doc
l.sh

$ ./l.sh 
<li>
<h5>INFO1</h5>
<p>INFO2</p>
</li>
<li>
<h5>INFO1</h5>
<p>INFO4</p>
</li>

剧本:

#!/bin/bash

for i in *.doc
do
    # split file-name into array
    IFS='- ' read -a array <<< "$i"
    echo "<li>"
    echo "<h5>${array[0]}</h5>"
    echo "<p>${array[1]}</p>"
    echo "</li>"
done

<强>更新

如果filename看起来像这样:

First name blabla - Second part bla boa - third part, unimportant.doc

改为将IFS参数更改为单个-

进行此更改:

    IFS='-' read -a array <<< "$i"

输出:

$ ./l.sh 
<li>
<h5>First name blabla </h5>
<p> Second part bla boa </p>
</li>
<li>
<h5>INFO1 </h5>
<p> INFO2 </p>
</li>
<li>
<h5>INFO1 </h5>
<p> INFO4 </p>
</li>

更新2

#!/bin/bash

for i in *.doc
do
    # split file-name into array
    IFS='-' read -a array <<< "$i"
    echo "<li>"
    echo "<h5>${array[0]}</h5>"
    echo "<p>${array[1]}</p>"
    echo "</li>"
    echo "<a href=\"files/${i}\">download</a>"
done

输出:

<li>
<h5>First name blabla </h5>
<p> Second part bla boa </p>
</li>
<a href="files/First name blabla - Second part bla boa - third part, unimportant.doc">download</a>
<li>
<h5>INFO1 </h5>
<p> INFO2 </p>
</li>
<a href="files/INFO1 - INFO2 - INFO3.doc">download</a>
<li>
<h5>INFO1 </h5>
<p> INFO4 </p>
</li>
<a href="files/INFO1 - INFO4 - INFO6.doc">download</a>

答案 1 :(得分:1)

for f in *.doc; do ( 
    IFS=-
    set -- $f
    echo "<li><h5>$1</h5><p>$3</p><a href='files/$*'>download</a></li>"
)
done

括号中的部分在子shell中执行,因此IFS变量的更改已本地化。测试:

$ touch 'info1 - inf2 - info 3.doc'
$ touch 'First name blabla - Second part bla boa - third part, unimportant.doc'
$ for f in *.doc; do ( 
>     IFS=-
>     set -- $f
>     echo "<li><h5>$1</h5><p>$3</p><a href='files/$*'>download</a></li>"
> )
> done
<li><h5>First name blabla </h5><p> third part, unimportant.doc</p><a href='files/First name blabla - Second part bla boa - third part, unimportant.doc'>download</a></li>
<li><h5>info1 </h5><p> info 3.doc</p><a href='files/info1 - inf2 - info 3.doc'>download</a></li>