- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
不久前,我编写了一个 javascript 程序来遍历目录树并从树的前 3 层构建一个 html 导航菜单文件。我现在正尝试使用 bash 复制它,因为 JS 程序需要 IE 浏览器和 activeX 才能运行。我是 bash 的新手,所以这对我来说是一次很棒的学习经历。
所以,我的结构如下:
-Folder A
--Folder B
--Folder C
--Folder C1
--Folder C2
--Folder CC1
--Folder D
--Folder D1
--Folder E
等你明白了。无论如何,文件夹名称各不相同,但每个文件夹中都有一个名为“foldername.txt”的文本文件。此文件中有一行文本,其中包含要在菜单上使用的实际文件夹名称(这是由于某些名称的长度所致)。
因此,我试图遍历每个文件夹/子文件夹,仅向下到第 3 级,读取文件夹中的每个 foldername.txt 文件并返回名称,同时保持文件夹层次结构。我希望这是有道理的。输出附加有 html 标记并回显到 .htm 文件。
到目前为止,我已经尝试了不同的方法。下面的代码几乎可以满足我的要求,它将扫描目录并根据文本文件返回名称,但不维护层次结构。不幸的是,我没有包含 -maxdepth 的 find 版本。如您所见,我尝试了嵌套循环,因为它只有 3 层深,但是递归在每个级别继续进行,因此我得到了重复和奇怪的结果。
#!/bin/bash
ROOT=/data/
OUTPUTFILE=${ROOT}/Menu-test.html
# Create first level items - these are static
HEADING="<UL class=navlist1>
<LI><SPAN class=plus><p>-</p></SPAN><A class=''>Level 1 products</A></LI>"
END="</UL>"
L2="<UL class=navlist2>"
L3="<UL class=navlist3>"
LI="<LI><SPAN class=plus><P>+</P></SPAN>"
LIEND="</LI>"
echo $HEADING > $OUTPUTFILE;
# set shell options
shopt -s nullglob
# loop through top level dir
for d in $DIR/*/
do
for file in $(find $d -name "foldername.txt");
do
OUT=$(awk '{ print $0 }' $file)
echo $LI$OUT$LIEND >> $OUTPUTFILE;
done
# loop through second level dir
for e in $d/*/
do
echo $L2 >> $OUTPUTFILE;
for file2 in $(find $e -type f -name "foldername.txt");
do
OUT2=$(awk '{ print $0 }' $file2)
echo $LI$OUT2$LIEND >> $OUTPUTFILE;
done
echo $END >> $OUTPUTFILE;
# loop through third level dir
for f in $e/*/
do
echo $L3 >> $OUTPUTFILE;
for file3 in $(find $f -type f -name "foldername.txt");
do
OUT3=$(awk '{ print $0 }' $file3)
echo $LI$OUT3$LIEND >> $OUTPUTFILE;
done
echo $END >> $OUTPUTFILE;
done
done
done
echo $END >> $OUTPUTFILE;
对于冗长的帖子和凌乱的代码,我深表歉意,但我真的很想自己先尝试这样做,因为这是我最好的学习方式。所以关于我如何让它工作的任何想法。请注意,我无法使用 Python 或任何其他语言,所以 bash 是。
我正在寻找的输出如下(连字符只是为了保持格式,不在输出中):
**<LI><SPAN class=plus><P>+</P></SPAN><A href=''>**
<UL class='navlist1'>
<LI><SPAN class='plus'><p>-</p></SPAN><A class=''>Folder A</A>
<UL class='navlist2' style='display:block'>
<LI><SPAN class='bull'><p class='bull'>•</p></SPAN><A href='http://www.somewhere.com/index.htm'>Folder A1</A></LI>
<LI><SPAN class='bull'><p class='bull'>•</p></SPAN><A href='http://www.somewhere.com/index.htm'>Folder A2</A></LI>
<LI><SPAN class='bull'><p class='bull'>•</p></SPAN><A href='http://www.somewhere.com/index.htm'>Folder A3</A></LI>
</UL**></A>
<UL class=navlist1>**
<LI><SPAN class=plus><P>+</P></SPAN><A href=''>Folder B</A></LI>
<LI><SPAN class=plus><P>+</P></SPAN><A href=''>Folder C</A></LI>
<LI><SPAN class=plus><P>+</P></SPAN><A href=''>Folder D</A></LI>
<UL class=navlist2>
<LI><SPAN class=plus><P>+</P></SPAN><A href=''>Folder D1</A>
<UL class=navlist3>
<LI><SPAN class=plus><P>+</P></SPAN><A href=''>Folder D1A</A></LI>
<LI><SPAN class=plus><P>+</P></SPAN><A href=''>Folder D1B</A></LI>
<LI><SPAN class=plus><P>+</P></SPAN><A href=''>Folder D1C</A></LI>
<LI><SPAN class=plus><P>+</P></SPAN><A href=''>Folder D1D</A></LI>
<LI><SPAN class=plus><P>+</P></SPAN><A href=''>Folder D1E</A></LI>
</UL>
</LI>
<LI><SPAN class=plus><P>+</P></SPAN><A href=''>Folder D2</A>
<UL class=navlist3>
<LI><SPAN class=plus><P>+</P></SPAN><A href=''>Folder D2A</A></LI>
<LI><SPAN class=plus><P>+</P></SPAN><A href=''>Folder D2B</A></LI>
<LI><SPAN class=plus><P>+</P></SPAN><A href=''>Folder D2C</A></LI>
</UL>
</LI>
</UL>
</LI>
<LI><SPAN class=plus><P>+</P></SPAN><A href=''>Folder E</A></LI>
<LI><SPAN class=plus><P>+</P></SPAN><A href=''>Folder F</A></LI>
<LI><SPAN class=plus><P>+</P></SPAN><A href=''>Folder G</A></LI>
<UL class=navlist2>
<LI><SPAN class=plus><P>+</P></SPAN><A href=''>Folder G1</A>
<UL class=navlist3>
<LI><SPAN class=plus><P>+</P></SPAN><A href=''>Folder G1A</A></LI>
<LI><SPAN class=plus><P>+</P></SPAN><A href=''>Folder G1B</A></LI>
<LI><SPAN class=plus><P>+</P></SPAN><A href=''>Folder G1C</A></LI>
<LI><SPAN class=plus><P>+</P></SPAN><A href=''>Folder G1D</A></LI>
</UL>
</LI>
</UL>
</LI>
</UL>
**</LI>**
所以,这是当前的工作输出。我还需要做的是在每个 中包含 href 链接,但是,每个级别的子文件夹都有不同的路径,结构如下:
navlist1 = http://www.somewhere.com/here//登陆.htm
navlist2 & 3 = http://www.somewhere.com/here/there//索引.htm
folder 是目录的实际文件夹名称,而不是文本文件中的名称,显然链接将无法正常工作。
上面粗体的行不应该出现在输出中。
谢谢。
最佳答案
也是一个递归的(我无法抗拒,抱歉);-)
#!/bin/bash
#preset variables, exec redirects everything to outputfile
ROOT="/data"
LABEL="foldername.txt"
MAXDEPTH=5
DEPTH=0
HTTP="http://www.somewhere.com"
exec > "$ROOT/Menu-test.html"
#functions for indentation, definition and printing tags
LI="<LI><SPAN class=plus><P>+</P></SPAN>"
ULecho() { Dent ; echo "<UL class='navlist$DEPTH'>" ;}
LIecho() { echo -n "$LI<A href='$HTTP${1/$ROOT/}/'>$( cat $LABEL)</A>" ;}
Indent() { for (( i=1 ; i < DEPTH ; ++i )); do Dent; Dent; done ; Dent ;}
Dent() { echo -n " " ;}
LIstrt() { Indent; LIecho "$( pwd )" ; echo "</LI>" ;}
ULstrt() { Indent; LIecho "$( pwd )" ; echo; Indent; ULecho ;}
TAGend() { Indent ; Dent ; echo "</UL>"; Indent; echo "</LI>" ;}
DEPchk() { [ "$DEPTH" -gt "0" ] && ${1} ;}
:> $ROOT/$LABEL
Dive()
{
local DPATH="$1"
if [ "$( echo */$LABEL )" = "*/$LABEL" ] || [ $DEPTH -gt $MAXDEPTH ]
then
DEPchk LIstrt
else
DEPchk ULstrt
for DPATH in */$LABEL
do
cd ${DPATH%/*}
(( ++DEPTH ))
Dive "$DPATH"
(( --DEPTH ))
cd ..
done
DEPchk TAGend
fi
}
cd $ROOT
Dive "$ROOT"
echo "</UL>"
更新:
我试着添加一些你也提到的额外内容,但我想我没有详细的了解。也许是因为我对 HTML 的了解几乎不存在。所以你真的必须为我拼出来 ;-)
关于用于创建 HTML 导航菜单的 bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20275254/
前言: 有时候,一个数据库有多个帐号,包括数据库管理员,开发人员,运维支撑人员等,可能有很多帐号都有比较大的权限,例如DDL操作权限(创建,修改,删除存储过程,创建,修改,删除表等),账户多了,管理
所以我用 Create React App 创建并设置了一个大型 React 应用程序。最近我们开始使用 Storybook 来处理和创建组件。它很棒。但是,当我们尝试运行或构建应用程序时,我们不断遇
遵循我正在创建的控件的代码片段。这个控件用在不同的地方,变量也不同。 我正在尝试编写指令来清理代码,但在 {{}} 附近插入值时出现解析错误。 刚接触 Angular ,无法确定我错过了什么。请帮忙。
我正在尝试创建一个 image/jpeg jax-rs 提供程序类,它为我的基于 post rest 的 Web 服务创建一个图像。我无法制定请求来测试以下内容,最简单的测试方法是什么? @POST
我一直在 Windows 10 的模拟器中练习 c。后来我改用dev C++ IDE。当我在 C 中使用 FILE 时。创建的文件的名称为 test.txt ,而我给出了其他名称。请帮助解决它。 下面
当我们创建自定义 View 时,我们将 View 文件的所有者设置为自定义类,并使用 initWithFrame 或 initWithCode 对其进行实例化。 当我们创建 customUITable
我正在尝试为函数 * Producer 创建一个线程,但用于创建线程的行显示错误。我为这句话加了星标,但我无法弄清楚它出了什么问题...... #include #include #include
今天在做项目时,遇到了需要创建JavaScript对象的情况。所以Bing了一篇老外写的关于3种创建JavaScript对象的文章,看后跟着打了一遍代码。感觉方法挺好的,在这里与大家分享一下。 &
我正在阅读将查询字符串传递给 Amazon 的 S3 以进行身份验证的文档,但似乎无法理解 StringToSign 的创建和使用方式。我正在寻找一个具体示例来说明 (1) 如何构造 String
前言:我对 C# 中任务的底层实现不太了解,只了解它们的用法。为我在下面屠宰的任何东西道歉: 对于“我怎样才能开始一项任务但不等待它?”这个问题,我找不到一个好的答案。在 C# 中。更具体地说,即使任
我有一个由一些复杂的表达式生成的 ILookup。假设这是按姓氏查找人。 (在我们简单的世界模型中,姓氏在家庭中是唯一的) ILookup families; 现在我有两个对如何构建感兴趣的查询。 首
我试图创建一个 MSI,其中包含 和 exe。在 WIX 中使用了捆绑选项。这样做时出错。有人可以帮我解决这个问题。下面是代码: 错误 error LGH
在 Yii 中,Create 和 Update 通常使用相同的形式。因此,如果我在创建期间有电子邮件、密码、...other_fields...等字段,但我不想在更新期间专门显示电子邮件和密码字段,但
上周我一直在努力创建一个给定一行和一列的 QModelIndex。 或者,我会满足于在已经存在的 QModelIndex 中更改 row() 的值。 任何帮助,将不胜感激。 编辑: QModelInd
出于某种原因,这不起作用: const char * str_reset_command = "\r\nReset"; const char * str_config_command = "\r\nC
现在,我有以下由 original.df %.% group_by(Category) %.% tally() %.% arrange(desc(n)) 创建的 data.frame。 DF 5),
在今天之前,我使用/etc/vim/vimrc来配置我的vim设置。今天,我想到了创建.vimrc文件。所以,我用 touch .vimrc cat /etc/vim/vimrc > .vimrc 所
我可以创建一个 MKAnnotation,还是只读的?我有坐标,但我发现使用 setCooperative 手动创建 MKAnnotation 并不容易。 想法? 最佳答案 MKAnnotation
在以下代码中,第一个日志语句按预期显示小数,但第二个日志语句记录 NULL。我做错了什么? NSDictionary *entry = [[NSDictionary alloc] initWithOb
我正在使用与此类似的代码动态添加到数组; $arrayF[$f+1][$y][$x+1] = $value+1; 但是我在错误报告中收到了这个: undefined offset :1 问题:尝试创
我是一名优秀的程序员,十分优秀!