如何递归运行Tidy-html5(HTML Tidy)处理所有HTML文件?
当然没问题!递归处理所有子目录里的HTML文件是完全可以实现的,我给你分享两种最常用的可靠方法,适配不同的使用场景:
方法1:使用
find命令(通用跨shell方案) 这是最稳妥的方法,几乎在所有类Unix系统的shell里都能生效,而且能完美处理带特殊字符(比如空格)的文件名,还不会遇到命令行长度限制的问题。
直接运行这条命令:
find ./src -type f -name "*.html" -exec tidy -mq {} +
让我拆解一下每个参数的作用:
./src:指定要搜索的起始目录(就是你的HTML文件根目录)-type f:只搜索文件,避免误处理目录本身-name "*.html":只匹配后缀为.html的文件-exec tidy -mq {} +:把找到的所有HTML文件批量传给tidy命令执行,{}会被替换成找到的文件路径,+表示一次性传递尽可能多的文件(比逐个传递效率高很多)
方法2:使用Bash的
globstar特性(简洁方案,适用于Bash 4+) 如果你的系统用的是Bash 4.0及以上版本(大部分现代Linux发行版和macOS的Bash都满足),可以用更简洁的通配符写法:
- 先开启
globstar选项(如果还没开启的话):
shopt -s globstar
这个选项允许**作为递归通配符,匹配当前目录及所有子目录。
- 然后直接运行tidy命令:
tidy -mq ./src/**/*.html
这里的./src/**/*.html会匹配src目录下所有层级子目录里的.html文件。
额外提示
- 确认
tidy的参数符合你的需求:-m表示直接修改原文件(in-place编辑),-q是安静模式,减少不必要的输出。如果想先预览修改效果而不实际更改文件,可以去掉-m参数,让tidy把处理后的内容输出到终端。 - 如果你的文件名里包含空格、引号等特殊字符,优先用
find的方法,它会自动处理这些情况,避免出错。 - 如果需要对找到的文件做更多自定义处理(比如先备份再修改),可以在
find的-exec里写一个小脚本,比如:
find ./src -type f -name "*.html" -exec sh -c 'cp "$1" "$1.bak" && tidy -mq "$1"' _ {} \;
这条命令会先给每个HTML文件创建备份(后缀.bak),再运行tidy修改原文件。
内容的提问来源于stack exchange,提问作者Daniel Kim
相关产品推荐
相关产品推荐

