在bash中使用find命令以查找具有不同类型的多个文件

时间:2014-11-25 06:15:53

标签: linux bash find

我正在运行测试场景。每次执行场景时,特定目录中都有两个报告文件;一个是文本文件,另一个是HTML文件。我想创建一个索引文件链接到所有文件。我写了一个for循环来迭代场景文件并执行它们;我还想从HTML文件中读取测试场景的最终结果,并将其附加到索引文件中。在循环结束时,我使用find命令为链接附加<a>标记。

for line in $(grep '^scenario ' $scenarioList | cut -d' ' -f2)
do
    # Scripts for running tests
    find -name '*.txt' -exec sh -c 'f="`basename {}`"; echo "<br><span>Text Report: <a href="./$f" target="_blank">$f</a> -- </span>" >> index.htm' \;
    find -name '*.html' -exec sh -c 'f="`basename {}`"; p=`cat $f | grep -Eo "Final Result :.*\." | cut -d"." -f1`; echo "<span>HTML Report: <a href="./$f" target="_blank">$f</a></span> -- <span>$p</span><br>" >> index.htm' \;
    # Other scripts
done

它应创建指向文本文件的链接,链接到HTML文件以及每个方案的最终结果在一行中以--分隔。

如果我在一个场景中运行这个脚本,一切看起来都是正确的:

enter image description here

但如果我在更多场景中运行它,则会产生错误的链接:

enter image description here

我知道我可以使用-o选项进行逻辑OR,但我不知道如何将文本文件和HTML文件相互分离以创建链接。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

您使用-o

-printffind选项
find . -name '*.txt' -printf '<br><span>Text Report: <a href="%p" target="_blank">%f</a> -- </span>' -o  -name '*.html' -printf '<span>HTML Report: <a href="%p" target="_blank">%f</a></span>'

我可能在那里搞砸了你的格式,但我认为你明白了。

%p选项打印相对于搜索的完整文件路径,%f打印文件名

答案 1 :(得分:0)

也许这样的事情。这假设可以从HTML文件的名称预测文本文件的名称。我还重构了你的shell脚本,它似乎是单一的和/或低效的。

grep '^scenario ' "$scenarioList" |
cut -d' ' -f2 |
while read -r line; do
    # Scripts for running tests
    find -name '*.html' -exec sh -c '
        f="$(basename {} _style-all.html)";
        echo "<br><span>Text Report: <a href="./${f}blog.txt" target="_blank">${f}blog.txt</a> -- </span>";
        h=$(grep -Eo "Final Result :.*\." {} | cut -d"." -f1);
        echo "<span>HTML Report: <a href="./${f}_style-all.html" target="_blank">${f}_style-all.html</a></span> -- <span>$p</span><br>"'
    # Other scripts
done >index.html