求助:编写脚本删除以strings.txt中指定字符串开头的文件
没问题,我来给你几个实用的脚本方案,适配不同操作系统,你可以按需选用:
Bash脚本(适用于Linux/macOS)
这个脚本可以读取strings.txt里的所有前缀(不管是每行一个还是空格分隔),然后删除当前目录下所有以这些前缀开头的文件:
#!/bin/bash # 先检查目标文件是否存在,避免白忙活 if [ ! -f "strings.txt" ]; then echo "错误:strings.txt 文件不存在,请确认路径!" exit 1 fi # 读取文件中的每个前缀,兼容空格分隔或每行一个的格式 while read -r -a prefixes; do for prefix in "${prefixes[@]}"; do # 仅查找当前目录下的文件(不包含子目录),匹配前缀后删除 find . -maxdepth 1 -type f -name "${prefix}*" -delete # 如果需要递归删除子目录里的对应文件,把上面一行改成下面这句: # find . -type f -name "${prefix}*" -delete echo "已处理前缀 ${prefix}:删除所有匹配的文件" done done < "strings.txt"
脚本说明
- 开头的检查确保不会因为找不到
strings.txt而报错 read -r -a会把每行的空格分隔前缀都存入数组,所以不管你的列表是每行一个还是空格连在一起都能处理-maxdepth 1限制只在当前目录操作,避免误删子目录里的文件;如果需要递归处理,去掉这个参数即可-type f确保只删除文件,不会误删同名目录
PowerShell脚本(适用于Windows)
如果你用的是Windows系统,这个PowerShell脚本可以实现同样的需求:
# 先验证strings.txt是否存在 if (-not (Test-Path "strings.txt")) { Write-Error "错误:未找到strings.txt文件,请确认位置!" exit 1 } # 读取文件内容,自动分割所有空白字符(空格、换行都算),过滤空字符串 $prefixes = (Get-Content "strings.txt" -Raw) -split '\s+' | Where-Object { $_ -ne '' } foreach ($prefix in $prefixes) { # 查找当前目录下以该前缀开头的文件并删除 Get-ChildItem -Path . -Filter "${prefix}*" -File | Remove-Item -Force # 需要递归删除子目录文件的话,加上 -Recurse 参数: # Get-ChildItem -Path . -Filter "${prefix}*" -File -Recurse | Remove-Item -Force Write-Host "已处理前缀 $prefix:完成匹配文件的删除" }
脚本说明
Test-Path用来检查文件是否存在,提前规避错误-split '\s+'会把文件里所有的空格、换行都作为分隔符,不管你的列表格式如何都能正确提取前缀-File参数确保只处理文件,不会误删目录;-Force可以强制删除只读文件- 加上
-Recurse就能递归处理所有子目录里的匹配文件
重要注意事项
- 先测试再执行!:建议先把删除命令换成打印命令,确认匹配的文件是你想删的。比如在Bash里把
-delete换成-print,PowerShell里把Remove-Item -Force换成Select-Object Name,先看看输出的文件列表是否正确。 - 备份重要文件:执行删除操作前,最好把目标目录里的重要文件备份一份,避免误删造成损失。
- 特殊字符处理:如果你的前缀里包含
*、?这类通配符,需要额外转义,但从你的示例来看都是数字前缀,所以不用操心这个问题。
内容的提问来源于stack exchange,提问作者Serjudo
相关产品推荐
相关产品推荐

