如何通过Shell实现仓库中文件引用的批量检测,以自动化清理未使用的SVG/PNG资源
如何通过Shell实现仓库中文件引用的批量检测,以自动化清理未使用的SVG/PNG资源
确实手动逐个检查冗余资源太耗时了!我之前清理项目里的闲置图片时也踩过这个坑,下面分享几种实用的Shell方法,帮你批量检测这些SVG/PNG是否被仓库中的代码引用:
1. 单个资源的快速检测
如果你只是想先验证单个资源是否被引用,可以直接用grep递归搜索仓库:
# 替换成你要检查的资源文件名,比如logo.svg grep -r "logo.svg" .
-r参数表示递归遍历当前目录(.)下的所有文件- 如果命令没有任何输出,说明这个资源没有被任何文件引用;反之会列出所有引用它的文件路径
2. 批量检测所有SVG/PNG的脚本
要自动化处理所有资源,可以写一个简单的Bash脚本,遍历所有SVG/PNG并逐个检查引用情况:
#!/bin/bash # 遍历当前仓库下所有.svg和.png文件(包含子目录) find . -type f \( -name "*.svg" -o -name "*.png" \) | while read -r asset_path; do # 提取纯文件名(避免路径前缀干扰,比如不同目录下的同名文件) asset_filename=$(basename "$asset_path") # 只搜索常见的会引用资源的文件类型(可根据你的项目调整) if ! grep -r --include="*.html" --include="*.js" --include="*.css" --include="*.vue" --include="*.jsx" "$asset_filename" . > /dev/null; then echo "⚠️ 未被引用的资源:$asset_path" # 如果你确认要直接删除,可取消下面的注释 # rm "$asset_path" fi done
脚本说明:
find命令负责筛选出所有SVG/PNG文件,-type f确保只找文件而非目录--include参数用来限定搜索范围,只检查HTML、JS、CSS、Vue、React等可能引用资源的文件,避免搜索二进制文件或无关配置,提升效率> /dev/null用来屏蔽匹配成功时的输出,只通过命令退出码判断是否存在引用(!表示没有找到匹配)
3. 优化建议
- 先导出未引用资源列表再删除:建议先把未被引用的资源路径输出到一个文件,确认无误后再批量删除,避免误删:
# 修改脚本中的echo行,输出到文件 echo "$asset_path" >> unused_assets.txt # 确认后批量删除 cat unused_assets.txt | xargs -d '\n' rm - 处理特殊文件名:脚本中用
read -r和双引号包裹变量,已经支持带空格或特殊字符的文件名 - 更快的搜索工具:如果你的仓库很大,推荐用
ripgrep(简称rg)替代grep,搜索速度会快很多,只需把脚本中的grep替换为rg,参数基本兼容
注意事项
这种静态搜索方法只能检测显式的字符串引用,如果你的项目中存在动态引用(比如通过变量拼接路径:require('./assets/' + iconName)),这类情况无法通过Shell脚本检测,可能需要借助项目专属的工具来进一步排查。
备注:内容来源于stack exchange,提问作者therealcobb
相关产品推荐
相关产品推荐

