如何用单行Bash代码生成静态站点的站点地图?
生成符合要求的URL列表与XML站点地图
一、生成TXT格式的URL列表
直接用find配合sed就能完成路径转换,执行以下命令即可得到目标TXT文件:
find ./pages -name '*.js' | sed -E 's|^\./pages/||; s|/index\.js$||; s|\.js$||; s|^|https://www.example.com|' > sitemap.txt
各部分处理逻辑:
s|^\./pages/||:移除路径开头的./pages/前缀s|/index\.js$||:将结尾的/index.js替换为空(比如/pages/about/index.js转为about)s|\.js$||:去掉所有文件的.js后缀(比如/pages/about/team.js转为about/team)s|^|https://www.example.com|:在每行开头添加网站域名前缀
二、生成带最后修改日期的XML站点地图
用bash循环结合date和文本处理,生成符合sitemap规范的XML文件,执行以下脚本:
#!/bin/bash # 写入XML头部 echo '<?xml version="1.0" encoding="UTF-8"?>' > sitemap.xml echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' >> sitemap.xml # 遍历所有pages下的js文件 find ./pages -name '*.js' | while read -r file; do # 处理URL路径 url=$(echo "$file" | sed -E 's|^\./pages/||; s|/index\.js$||; s|\.js$||') # 处理根目录的index.js,转为首页URL if [ -z "$url" ]; then full_url="https://www.example.com" else full_url="https://www.example.com/$url" fi # 获取文件最后修改日期 lastmod=$(date -r "$file" +"%Y-%m-%d") # 写入单个URL节点 echo " <url>" >> sitemap.xml echo " <loc>$full_url</loc>" >> sitemap.xml echo " <lastmod>$lastmod</lastmod>" >> sitemap.xml echo " </url>" >> sitemap.xml done # 闭合XML根标签 echo '</urlset>' >> sitemap.xml
执行后会生成sitemap.xml,完全符合你需要的格式,每个URL节点都会包含对应的最后修改日期。
内容的提问来源于stack exchange,提问作者Costa Michailidis
相关产品推荐
相关产品推荐

