Windows下如何用正则递归删除有对应dbg兄弟文件的指定文件?
解决Windows 10中递归删除符合特定条件文件的方案
针对你需要在Windows 10系统里,通过PowerShell或Git控制台(Unix命令环境)递归删除指定文件的需求,下面分别给出两种完全匹配规则的实现方案:
一、使用PowerShell实现
这个方案会递归遍历目标文件夹,筛选出非-dbg版本的.js文件,同时验证该文件所在目录下存在对应的-dbg版本兄弟文件,再执行删除操作。
命令(预览模式)
Get-ChildItem -Recurse -File -Filter "*.js" | Where-Object { # 排除本身带-dbg的.js文件 $_.Name -notmatch '.+?-dbg.*?\.js' # 检查同目录下是否存在对应的-dbg版本文件 -and (Test-Path (Join-Path $_.DirectoryName ($_.BaseName + "-dbg" + $_.Extension))) } | Remove-Item -WhatIf
说明
Get-ChildItem -Recurse -File -Filter "*.js":递归查找所有.js类型的文件Where-Object中的两个核心条件:$_.Name -notmatch '.+?-dbg.*?\.js':确保待处理文件不是-dbg版本的文件Test-Path (...):验证当前文件所在目录下,存在基础文件名后加-dbg的兄弟文件
-WhatIf:预览将要删除的文件列表,确认无误后去掉该参数即可执行实际删除
二、使用Git控制台(Unix命令环境)实现
Git Bash支持Unix命令,我们可以用find命令结合shell脚本完成需求,逻辑和PowerShell完全一致。
命令(带删除提示)
find . -type f -name "*.js" ! -name "*-dbg*.js" -exec sh -c ' for file do # 生成对应的-dbg版本文件名 dbg_file="${file%.*}-dbg.${file##*.}" # 检查-dbg文件是否存在 if [ -f "$dbg_file" ]; then echo "准备删除:$file" rm "$file" fi done ' sh {} +
说明
find . -type f -name "*.js" ! -name "*-dbg*.js":递归查找所有.js文件,排除带-dbg的版本${file%.*}:提取文件的基础名称(不含扩展名),${file##*.}:提取文件扩展名,拼接成对应的-dbg版本文件名echo "准备删除:$file":打印将要删除的文件路径,确认无误后可以删除这一行,直接执行rm操作
示例验证
以你提供的测试文件夹为例:
- 会被删除的文件:
ActionMode.js、Component.js、DualContribution.controller.js(均存在对应的-dbg兄弟文件) - 不会被处理的文件:
ActionMode-dbg.js、Component-dbg.js、DualContribution-dbg.controller.js(本身是-dbg版本,被排除);resources.js(无对应-dbg兄弟文件);manifest-json(不是.js文件)
内容的提问来源于stack exchange,提问作者Alberto
相关产品推荐
相关产品推荐

