Glob Basics

return to main index


This tutorial draws upon a previous tutorial that dealt with list basics. If you are not familiar with list handling you should read that tutorial before proceeding.

The glob command is used to assign a list of file/directory names to a variable. For example,

    set dir "C:/tcl"
    puts "Directory contents are:\n[glob -directory $dir *]"

The asterix is called the wild card. In effect it makes the glob command return a full list of all the files and directories within the target directory irrespective of their name and/or file extension.

Building on what was explained in list basics we can process each item in a list returned by glob.

    set dir "C:/tcl"
    set contents [glob -directory $dir *]
    puts "Directory contents are:"
    foreach item $contents {
        puts $item

The glob command will generate error messages if the target directory does not exist. A typical error message is shown below,

no files matched glob pattern "*"
    while executing
"glob -directory $dir *"
    invoked from within
"puts "Directory contents are:\n[glob -directory $dir *]""

Its often better to use the nocomplain flag to turn-off such messages.

    [glob -nocomplain -directory $dir *]

Using Glob Recursively

The following recursive procedure ensures that files within the nested sub-directories of the target directory are printed to the console.

    proc printDir { dir } {
        set contents [glob -directory $dir *]
        foreach item $contents {
            puts $item
            # recurse - go into the sub directory
            if { [file isdirectory $item] } {
                printDir $item 

The use of this proc is shown below,

    printDir "C:\tcl"

For other examples refer to glob_basics.txt

© 2002- Malcolm Kesson. All rights reserved.