【问题标题】:Bash script for file listing (html output)用于文件列表的 Bash 脚本(html 输出)
【发布时间】:2013-06-12 18:58:26
【问题描述】:

我在编写用于根据名称制作 html 文件列表的小型 bash 脚本时遇到了问题。 我有一个命名模式为 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 在我这边生成它..

大家加油,保重

【问题讨论】:

    标签: html bash filelist


    【解决方案1】:

    你在找这个吗?:

    $ 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
    

    更新

    如果文件名如下所示:

    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>
    

    【讨论】:

    • 太好了,很高兴我能帮上忙。当您有代表这样做时,不要忘记投票/接受:-)
    • 嘿,但问题是文件名是这样的:
    • 嘿,但问题是文件名是这样的:名字 blabla - 第二部分 bla boa - 第三部分,unimportant.doc 所以我需要 ${array[0]} 表达式之前'-' 和 ${array[1]} 之后,有可能吗?
    • 查看更新。希望能回答你的问题。如果没有,请使用有效输入和预期输出更新您的问题。
    • 你是最棒的!我还有一个问题,如何显示为最后一个下载
    【解决方案2】:
    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>
    

    【讨论】:

    • 但我也想知道是否可以从 $1 中给出
    • 但没有空格,所以当 $1 是一二三时,我想将它作为 ONETWOTHREE,并且没有任何特殊字符(如波兰字母,因为我想在 jquery 中使用它)。干杯
  • 好的,把echo "&lt;li&gt;...改成echo "&lt;li id='${1// /}'&gt;...
  • 但是名称中仍然有波兰语字母,是否可以“在旅途中”将它们转换为所有合法的英文字符?
  • 猜你喜欢
    相关资源
    最近更新 更多
    热门标签