Я написал небольшой proc, чтобы рекурсивно удалить% TEMP% dir в окнах, которые были довольно громоздкими по каждому циклу выполнения. Но, похоже, он работал медленно - быстрее было вручную выбирать разные папки внутри пути% TEMP% и запускать удаление на нем. Есть ли возможность использовать потоки/pthreads для одновременного удаления папок. Или альтернативное решение. Нужна помощь в следующем коде.Tcl: удалять каталог рекурсивно - улучшая производительность с помощью потоков
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}
}
Я не знаю, что удаление целых каталогов параллельно будет быстрым. Скорость ограничена дисководом. –
Вместо того, чтобы рассматривать 'lf' как строку, было бы лучше создать список. Используйте 'lappend'. Прямо сейчас, он, вероятно, сломает имена файлов со встроенными пространствами. Также нет необходимости в 'regsub'. 'file delete может обрабатывать собственные имена. Также представляется, что вы передаете список файлов из каталога выше в следующем вызове DirRecursion. –