Nim 递归查找特定文件,删除所在目录
要求:从三个同步目录下分别选择性地删除上千个文件夹,每个待删除文件夹里都有 index.md 文件
如果手动删除,效率低不说,还容易出错。于是 海云青飞 写了 Nim 代码辅助工作
- 从一个同步目录里手动剪切出待删除的目录,移到上级目录的 to_del 文件夹内
- 用 Nim 程序递归搜索 to_del 文件夹,找到 index.md 文件,就把文件所在文件夹的绝对路径加入 seq[string] 表中,最后写入 dirList.txt
- 用 Nim 程序读取 dirList.txt,删除其他二个同步目录中的相应文件夹
#[
# 海云青飞 https://www.tuenhai.com
# 2024-09-06
Nim 编程语言 2.0
依文件名特征查找文件,批量删除文件所在文件夹
]#
import os, strutils, std/syncio
# 递归搜索文件名,返回包含文件所在文件夹的 seq[string]
proc findDirs(path: string, nameEnds: string): seq[string] =
for file in walkDirRec(path):
if file.endsWith(nameEnds):
result.add(file.parentDir())
# 一个文本文件的绝对路径,里面有按行分隔的待删除文件夹的绝对路径。默认与可执行文件同目
proc dirListPath(outputName: string): string =
getAppDir() / outputName
# 把所有待删除文件夹的绝对路径写入文本文件
proc writeDirList(dirList: seq[string], path: string) =
writeFile(path, dirList.join("\n"))
# 删除一个指定绝对路径的文件夹,如果出错,则打印路径,方便手动处理
proc deleteFolder(path: string) =
if dirExists(path):
try:
removeDir(path)
#echo "Folder deleted successfully: ", path
except OSError:
echo path, " -- Error deleting folder"
echo getCurrentExceptionMsg()
else:
echo "Folder does not exist: ", path
# 批量删除文本文件中列出的文件夹
proc deleteDirs(dirListPath: string ) =
let s = readFile(dirListPath)
let dirs = splitLines(s)
for dir in dirs:
deleteFolder(dir)
proc main() =
let
dirToSearch = r"C:\Users\tuenhai.com\to_del"
nameEnds = "index.md"
outputName = "dirList.txt"
dirList = findDirs(dirToSearch, nameEnds)
path = dirListPath(outputName)
writeDirList(dirList, path)
deleteDirs( path )
when isMainModule:
main()
2024-09-06
独立思考最难得,赞赏支持是美德!(微信扫描下图)