我写了一个小程序,以递归方式删除Windows上的%TEMP%目录,这在每个执行周期都非常笨重。 但它似乎运行缓慢 - 在%TEMP%路径中手动选择不同的文件夹并在其上运行删除更快。 是否有可能使用线程/ pthreads并行删除文件夹。 或者替代解决方案。 需要以下代码的帮助。
proc DirRecursion {dir args} {
set options(-files) ""
set options(-fileTypesFilter) "ALL"
array set options $args
upvar $options(-files) lf
#Performing action deletion on files for dir $dir ... please be patient as this might take some time
if ![catch { append lf " [glob -directory $dir -type f *]"}] {
} "Found following files to delete in dir $dir"
foreach f [set lf [regsub -all {\\} $lf {/}]] {
catch {file delete -force $f}
}
}
if ![catch { set ld [glob -directory $dir -type d *]}] {
foreach d $ld {
DirRecursion $d -files lf
}
} else {
puts "No directories to delete in dir $dir" debug
}
catch {file delete -force $dir}
}
答案 0 :(得分:3)
好吧,你可能这样做(可能是通过向file delete -force
发送请求到thread pool),因为瓶颈问题,它根本不可能提供帮助将在磁盘的实际读写中,即使在具有SSD的系统上也是如此。使用硬盘驱动器,这绝对是您将要等待的。
您知道file delete -force
已处理递归删除案例吗?它可能比你写的更快。由于我怀疑你实际上并不想删除%TEMP%
路径本身(因为这对你会话中的其他程序来说有点特殊),你可以这样做:
file delete -force {*}[glob -directory $::env(TEMP) *]
或者删除相应子目录的内容。一行而不是复杂的程序...
修改强>
这将尝试单独删除每个条目,即使由于权限错误而无法删除目录,也会继续。
foreach {entry} [glob -directory $::env(TEMP) *] {
catch { file delete -force $entry }
}