如何在 TCL 中 `rm -rf *`

How to `rm -rf *` in TCL

我想使用 TCL 删除目录中的所有文件。 (我在 Win 10 下使用 Xilinx Vivado 的 TCL 控制台。)我发现 TCL documentation

file delete ?-force? ?- -? pathname ?pathname ... ?

应该可以。 但是

file delete -force -- [glob *]

什么都不做。 这有什么问题吗?

做到这一点

  file delete -force -- {*}[glob *]

... 这样 [glob] 返回的路径名就变成了 [file delete] 的多个参数(使用扩展运算符 {*}),而不是一个参数代表一个路径名称列表(由 [file delete] 读取为一个非常复杂的文件路径)。

或者,在早于 8.5 的 Tcl 上,使用显式循环:

 foreach path [glob *] {
    file delete -force -- $path
 }

您需要考虑的其他事项:

  1. 您是否需要担心删除文件而不是目录?考虑 the glob command-type 选项。
  2. 如果您需要递归工作,请不要重新发明轮子并使用 tcllib。 fileutil::traverse and fileutil 个包是相关的。