Version 2 of recursive_glob

Updated 2011-04-28 08:09:05 by RLE

This command is part of the TclX package.

recursive_glob dirlist globlist

Return a list of all files in/below directories in dirlist that match one of the patterns in globlist. See also for_recursive_glob.


TR Using Tcl 8.5 or newer, you can easily use the proc below instead, which is just an improved version of the TclX code:

proc rglob {dirlist globlist} {
        set result {}
        set recurse {}
        foreach dir $dirlist {
                if ![file isdirectory $dir] {
                        return -code error "'$dir' is not a directory"
                }
                foreach pattern $globlist {
                        lappend result {*}[glob -nocomplain -directory $dir -- $pattern]
                }
                foreach file [glob -nocomplain -directory $dir -- *] {
                        set file [file join $dir $file]
                        if [file isdirectory $file] {
                                set fileTail [file tail $file]
                                if {!($fileTail eq "." || $fileTail eq "..")} {
                                        lappend recurse $file
                                }
                        }
                }
        }
        if {[llength $recurse] > 0} {
                lappend result {*}[rglob $recurse $globlist]
        }
        return $result
}