Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 在bash中使用find命令查找多个不同类型的文件_Linux_Bash_Find - Fatal编程技术网

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

Linux 在bash中使用find命令查找多个不同类型的文件,linux,bash,find,Linux,Bash,Find,我正在运行测试场景。每次执行场景时,特定目录中有两个报告文件;一个是文本文件,另一个是HTML文件。我想制作一个索引文件链接到所有文件。我编写了一个for循环来迭代场景文件并执行它们;我还想从HTML文件中读取测试场景的最终结果,并将其附加到索引文件中。在循环的末尾,我附加了--“>>index.htm'\; find-name'*.html'-exec sh-c'f=“`basename{}'”p=`cat$f | grep-Eo“最终结果:.*.''.''cut-d'.'-f1`;echo”

我正在运行测试场景。每次执行场景时,特定目录中有两个报告文件;一个是文本文件,另一个是HTML文件。我想制作一个索引文件链接到所有文件。我编写了一个for循环来迭代场景文件并执行它们;我还想从HTML文件中读取测试场景的最终结果,并将其附加到索引文件中。在循环的末尾,我附加了
--“>>index.htm'\;
find-name'*.html'-exec sh-c'f=“`basename{}'”p=`cat$f | grep-Eo“最终结果:.*.''.''cut-d'.'-f1`;echo”html报告:--$p
“>>index.htm\; #其他脚本 完成
它应该在一行中创建指向文本文件的链接、指向HTML文件的链接以及每个场景的最终结果,并用
--
分隔

如果我在一个场景中运行此脚本,那么一切似乎都是正确的:

但如果我在更多的场景中运行它,就会创建错误的链接:


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

您可以使用
-o
-printf
选项来查找

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>'
find.-name'*.txt'-printf'
文本报告:-'-o-name'*.html'-printf'html报告:'
我可能把你的格式弄乱了,但我想你明白了


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

,可能类似于此。这假定可以从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
grep“^scenario”“$scenarioList”|
切割-d'-f2|
当读取-r行时;执行
#运行测试的脚本
查找-name'*.html'-exec sh-c'
f=“$(basename{}_style-all.html)”;
echo“
文本报告:-”; h=$(grep-Eo“最终结果:.*\.{}| cut-d.”-f1); echo“HTML报告--$p
”' #其他脚本 完成>index.html
您的文件名是否总是采用这种格式(
*blog.txt
*\u style-all.html
)。如果是这样,你可以做简单的文本翻译。没有@knittl,模式就像我在命令中使用的一样。我只知道有两个文件,一个扩展名为
.html
,另一个扩展名为
.txt
。但是你能给我解释一下你提到的@knittl的
文本翻译吗?也许这有帮助。Grep for all
*blog.txt
文件,然后在生成链接时,将
blog.txt
替换为
\u style-all.html
不清楚您的
for
循环循环了哪些内容。行中有什么内容以及如何使用它?也不清楚您的目录结构是什么样子。输出看起来像您期望的那样
find
提取文本文件,然后再提取另一个HTML文件,但如果没有更多关于您的内容是如何组织的详细信息,我们无法提供任何有用的精确替代方案。“那么,不要这样做。”“这几乎是我们能为这个问题陈述提供的最好的答案。谢谢你的回答,它真的很有用;我现在可以将相关文件排成一行。但你还错过了其他一些东西。我想从HTML文件中读取以
最终结果:
开头的结果行,并将其添加到索引文件中的行末尾。你的建议是什么?你的意思是像
grep“最终结果:”filename
?不,
最终结果:
是HTML文件内容的一部分。@ZeinabAbbasi是的,但你仍然可以grep它是的,我可以grep它。你能回答我这个问题吗?
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