You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash中通过CSV文件删除目录中的指定文件

针对你要批量删除匹配指定唯一ID的图片文件需求,这里给你整理了几种不同平台的实用方案,你可以根据自己的操作系统选择:


一、Linux/macOS 终端(Shell 脚本)

不管你的CSV是空格分隔还是分号分隔,都能轻松处理:

  1. 空格分隔的CSV文件
    直接读取文件里的ID,循环删除对应前缀的所有图片:

    # 读取ID并批量删除,-v参数会显示删除的文件
    while read -r id; do
      rm -v "${id}-"*.jpeg
    done < ids_to_delete.csv
    
  2. 分号分隔的CSV文件
    先把分号换成换行,再执行删除操作:

    tr ';' '\n' < ids_to_delete.csv | while read -r id; do
      rm -v "${id}-"*.jpeg
    done
    

💡 小提示:如果怕误删,可以先把rm -v换成echo rm -v,这样只会预览要删除的文件列表,不会实际执行删除;要是CSV里有空行,就加个grep -v "^$"过滤掉,比如:

grep -v "^$" ids_to_delete.csv | while read -r id; do rm -v "${id}-"*.jpeg; done

二、Windows PowerShell

适配两种CSV格式的PowerShell脚本:

  1. 空格分隔的CSV文件

    # 读取文件并拆分出所有有效ID,循环删除匹配文件
    $ids = (Get-Content .\ids_to_delete.csv) -split '\s+' | Where-Object { $_ -ne '' }
    foreach ($id in $ids) {
      Remove-Item -Path "${id}-*.jpeg" -Verbose
    }
    
  2. 分号分隔的CSV文件

    $ids = (Get-Content .\ids_to_delete.csv) -split ';' | Where-Object { $_ -ne '' }
    foreach ($id in $ids) {
      Remove-Item -Path "${id}-*.jpeg" -Verbose
    }
    

💡 小提示:-Verbose参数会显示每一步删除的文件;测试阶段可以把Remove-Item换成Get-ChildItem,先查看要删除的文件列表是否正确。


三、Python 脚本(跨平台通用)

如果处理60万+文件想要更稳定的性能,或者需要额外逻辑校验,Python脚本是不错的选择:

import os

def delete_matching_images(img_dir, csv_path, delimiter=None):
    # 读取CSV文件内容
    with open(csv_path, 'r', encoding='utf-8') as f:
        content = f.read().strip()
    
    # 根据分隔符拆分出所有唯一ID
    if delimiter == ';':
        id_list = content.split(';')
    else:
        # 默认按空格/换行拆分
        id_list = content.split()
    
    # 过滤空字符串,确保每个ID都是有效内容
    valid_ids = [id_str.strip() for id_str in id_list if id_str.strip()]
    
    # 遍历图片目录,删除匹配的文件
    for filename in os.listdir(img_dir):
        if filename.endswith('.jpeg'):
            # 从文件名中提取唯一ID部分
            file_unique_id = filename.split('-')[0]
            if file_unique_id in valid_ids:
                full_path = os.path.join(img_dir, filename)
                os.remove(full_path)
                print(f"已删除: {full_path}")

# 替换成你自己的图片目录和CSV文件路径
if __name__ == "__main__":
    IMAGE_FOLDER = "/Users/xxx/your-image-folder"  # Windows路径类似 "C:\\Users\\xxx\\your-image-folder"
    CSV_FILE = "/Users/xxx/ids_to_delete.csv"
    # 如果是分号分隔的CSV,就把delimiter设为';',否则留空
    delete_matching_images(IMAGE_FOLDER, CSV_FILE, delimiter=None)

💡 小提示:测试时可以把os.remove(full_path)改成print(f"待删除: {full_path}"),先确认要删除的文件范围;如果图片目录有子文件夹,只需把os.listdir换成os.walk实现递归遍历即可。


重要提醒

操作前一定要备份好重要文件,或者先执行测试命令确认删除范围,避免误删数据!

内容的提问来源于stack exchange,提问作者imgnx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:00:24