实用脚本能批量筛选吗?

wen 实用脚本 11

本文目录导读:

实用脚本能批量筛选吗?

  1. 场景一:在文件系统中筛选文件(最常用)
  2. 场景二:筛选文本/CVS/日志文件中的内容(数据提取)
  3. 场景三:批量筛选并执行操作(删除/移动/重命名)
  4. 如何写出一个实用的“批量筛选”脚本?

是的,实用脚本完全可以批量筛选,批量筛选是脚本最擅长的场景之一,能大幅提升处理大量文件、数据或文本的效率。

具体用什么脚本语言取决于你的操作系统和具体需求,最常见的是 Shell (bash/zsh)PythonPowerShell

下面我会分场景介绍几种最实用的批量筛选脚本思路和代码片段,你可以根据自己的情况进行修改。


在文件系统中筛选文件(最常用)

需求:从大量文件中找到符合条件的文件,大于100MB的.log文件、最近7天修改过的图片、名称包含“report”的Excel文件。

Shell脚本 (Linux/macOS) 这是最直接的方式,结合 find 命令。

#!/bin/bash
# 筛选出 /var/log 目录下所有大于10MB且后缀是 .log 的文件
find /var/log -type f -name "*.log" -size +10M

Python脚本 (跨平台) 功能更强大,逻辑更复杂时首选。

import os
import glob
# 筛选当前目录下所有大于 10MB 的 .txt 文件
target_size = 10 * 1024 * 1024 # 10MB
for filepath in glob.glob("*.txt"): # 用 * 号通配
    try:
        size = os.path.getsize(filepath)
        if size > target_size:
            print(f"大文件: {filepath} ({size / 1024 / 1024:.2f} MB)")
    except OSError:
        pass

PowerShell脚本 (Windows) Windows环境下最强大。

# 筛选 C:\Windows\Temp 下,7天前修改过的 .tmp 文件
Get-ChildItem -Path "C:\Windows\Temp" -Filter "*.tmp" -Recurse | 
    Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-7) } |
    Select-Object FullName, LastWriteTime

筛选文本/CVS/日志文件中的内容(数据提取)

需求:从一个10万行的CSV文件中,只提取某一列、或者包含特定关键词的行。

Shell脚本:grep (最快) 擅长纯文本筛选,速度极快。

# 从 error.log 中筛选出所有包含 "ERROR" 或 "CRITICAL" 的行,并忽略大小写
grep -i -E "ERROR|CRITICAL" /var/log/error.log > filtered_errors.log

Python脚本:csv, pandas (最适合结构化数据)

# 筛选CSV文件,如:找到所有 "age" 大于30的行
import pandas as pd
df = pd.read_csv("large_data.csv")
filtered_data = df[df['age'] > 30]
filtered_data.to_csv("filtered_age_gt_30.csv", index=False)
print(f"筛选完成,共 {len(filtered_data)} 行符合条件。")

批量筛选并执行操作(删除/移动/重命名)

需求:筛选出符合条件的文件,然后批量删除它们。

Shell (一条命令搞定,危险动作请小心)

# 找到当前目录下所有 .tmp 临时文件并删除它们
find . -type f -name "*.tmp" -exec rm -f {} \;

Python (更安全,增加确认步骤)

import os
import glob
files_to_delete = glob.glob("**/*.tmp", recursive=True) # ** 表示递归所有子目录
print(f"将删除 {len(files_to_delete)} 个文件:")
for f in files_to_delete:
    print(f)
confirm = input("确认删除? (yes/no): ")
if confirm.lower() == "yes":
    for f in files_to_delete:
        os.remove(f)
        print(f"已删除 {f}")

如何写出一个实用的“批量筛选”脚本?

  1. 明确筛选条件

    • 文件本身:大小、日期、后缀、名称包含关键字。
    • :行内包含关键词、数值范围、符合正则表达式。
    • 目录结构:属于第几层子目录。
  2. 选择合适的工具

    • 简单、一次性任务:Shell命令find, grep, awk, sed)。
    • 复杂逻辑、跨平台、需要保存结果/生成新文件:Python
    • 想和Excel/Office联动:PowerShell
  3. 关键技巧

    • *通配符 `*.txt` 表示所有 txt 文件。
    • 正则表达式.*\.log$ 表示以 .log
    • 递归-r (shell命令) 或 (Python glob) 表示遍历子文件夹。
场景 推荐方案 优势
按文件属性筛选 find (Unix) / Get-ChildItem (PowerShell) 极快,原生系统命令,无需装环境
复杂数据/CVS分析 Python + pandas 灵活,可做高级运算、聚合、输出
批量操作 Shell的 -exec / Python的 shutil 可预防误操作

实用建议

  • 如果只是简单的“找一下”,Shell 一行命令就够了(用 findgrep)。
  • 如果需要循环、条件判断、记录日志、批量处理并生成报告,写一个 Python 脚本会更清晰、可维护。

你可以告诉我:你想筛选什么样的数据?是文件、文本,还是什么格式? 我可以帮你写一个更具体的脚本版本。

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