脚本如何模糊查找文件

wen 实用脚本 29

本文目录导读:

脚本如何模糊查找文件

  1. 1. Windows 系统
  2. 2. Linux/Mac 系统
  3. 3. Python 跨平台脚本
  4. 4. 常用模糊模式示例
  5. 5. 高级模糊搜索(基于相似度)
  6. 实用建议

Windows 系统

PowerShell 模糊查找

# 查找包含"report"的所有文件
Get-ChildItem -Path C:\ -Filter *report* -Recurse -ErrorAction SilentlyContinue
# 使用通配符灵活匹配
Get-ChildItem -Path D:\Docs -Filter "project_20??_*.txt"
# 正则表达式匹配
Get-ChildItem -Recurse | Where-Object {$_.Name -match "data_\d{4}_v\d"}

CMD 命令

dir /s /b *keyword*
dir /s /b *part1*part2*

Linux/Mac 系统

find 命令(推荐)

# 基本模糊查找
find /home -name "*report*"
# 忽略大小写
find /var -iname "*log*"
# 组合条件
find / -type f \( -name "*.txt" -o -name "*.doc" \) -name "*project*"
# 使用通配符
find . -name "data_[0-9][0-9][0-9][0-9]_v*"

grep 管道

# 列出包含特定模式的文件
ls -la | grep -i "pattern"
# 递归查找内容包含关键词的文件
grep -rl "error" /var/log/

Python 跨平台脚本

import os
import fnmatch
def fuzzy_find(root_dir, pattern):
    matches = []
    for root, dirs, files in os.walk(root_dir):
        for filename in fnmatch.filter(files, pattern):
            matches.append(os.path.join(root, filename))
    return matches
# 使用示例
files = fuzzy_find("C:/Projects", "*report*2024*")
for f in files:
    print(f)
# 更灵活的正则匹配
import re
def regex_find(root, regex):
    pattern = re.compile(regex, re.IGNORECASE)
    for root, dirs, files in os.walk(root):
        for f in files:
            if pattern.search(f):
                yield os.path.join(root, f)

常用模糊模式示例

通配符 含义 示例 匹配结果
任意字符(0或多个) *data* data, mydata.txt, database
单个字符 data_??.txt data_01.txt, data_ab.txt
[abc] 指定字符集 [Rr]eport Report, report
[!abc] 排除字符集 [!0-9]* 不以数字开头

高级模糊搜索(基于相似度)

from fuzzywuzzy import fuzz  # 需安装
import os
def fuzzy_search(root, target, threshold=70):
    results = []
    for root, dirs, files in os.walk(root):
        for f in files:
            score = fuzz.ratio(target, f.split('.')[0])
            if score >= threshold:
                results.append((f, score))
    return sorted(results, key=lambda x: -x[1])
# 使用:查找相似度>75%的文件
for name, score in fuzzy_search("C:/Docs", "quarterly_report"):
    print(f"{score}% {name}")

实用建议

  1. Windows用户:PowerShell 的 -like-match 是最灵活的方法
  2. Linux用户find + -name 是最快速的标准方法
  3. 跨平台需求:Python 的 os.walk + fnmatchpathlib
  4. 大目录:先限制搜索路径范围,避免全盘扫描

需要针对特定场景的示例吗?

抱歉,评论功能暂时关闭!