betontalpfa
betontalpfa

Reputation: 3752

How to `rm -rf *` in TCL

I want to delete all files in a directory using TCL. (I'm using Xilinx Vivado's TCL console under Win 10.) I found that in TCL documentation that

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

should work. But

file delete -force -- [glob *]

does nothing. What's the wrong with that?

Upvotes: 2

Views: 5362

Answers (2)

glenn jackman
glenn jackman

Reputation: 246807

Additional things for you do consider:

  1. do you need to be concerned about deleting files, not directories? Consider the -type option for the glob command.
  2. if you need to work recursively, don't reinvent the wheel and use tcllib. The fileutil::traverse and fileutil packages are relevant.

Upvotes: 3

mrcalvin
mrcalvin

Reputation: 3434

Make that

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

... so that the path names returned by [glob] are turned into multiple arguments to [file delete] (using the expansion operator {*}), rather than one argument representing the one list of a path names (read by [file delete] as one, well complex file path).

Alternatively, on Tcl older than 8.5, use an explicit loop:

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

Upvotes: 6

Related Questions