Version 1 of file rename

Updated 2005-08-17 08:04:17 by lwv

file rename ?-force? ?- -? source target

file rename ?-force? ?- -? source ?source ...? targetDir

The first form takes the file or directory specified by pathname source and renames it to target, moving the file if the pathname target specifies a name in a different directory. If target is an existing directory, then the second form is used. The second form moves each source file or directory into the directory targetDir. Existing files will not be overwritten unless the -force option is specified. When operating inside a single filesystem, Tcl will rename symbolic links rather than the things that they point to. Trying to overwrite a non-empty directory, overwrite a directory with a file, or a file with a directory will all result in errors. Arguments are processed in the order specified, halting at the first error, if any. A - - marks the end of switches; the argument following the - - will be treated as a source even if it starts with a -.


LV So, what kind of code would one need to take a directory of file names and rename them using regular expressions? For instance, say I wanted to remove spaces from files in a directory.

I'd suppose one would start with something like:

 set files [glob {* *}]
 foreach file in $files {
  if [[something that determines that there's no space]] {
        continue
  }
  set newfile [[some regsub string that removes the space]]
  file rename -force -- $file $newfile
 }

However, to do the above generically, so that a general old and new pattern could be passed and observed, that would be more difficult I suppose. If this code could be generically written, it would make a nice addition to fileutil.


See also:


Tcl syntax help - Category Command