Go to main content

man pages section 1: User Commands

Exit Print View

Updated: Wednesday, February 9, 2022

glob (1t)


glob - Return names of files that match patterns


glob ?switches? ?pattern ...?


glob(1t)                     Tcl Built-In Commands                    glob(1t)


       glob - Return names of files that match patterns

       glob ?switches? ?pattern ...?

       This  command performs file name "globbing" in a fashion similar to the
       csh shell or bash shell.  It returns a list of the  files  whose  names
       match  any  of the pattern arguments. No particular order is guaranteed
       in the list, so if a sorted list is  required  the  caller  should  use

       If  the initial arguments to glob start with - then they are treated as
       switches. The following switches are currently supported:

       -directory directory
              Search for files which match the given patterns starting in  the
              given directory. This allows searching of directories whose name
              contains glob-sensitive characters without  the  need  to  quote
              such  characters explicitly. This option may not be used in con-
              junction with -path, which is used to allow searching  for  com-
              plete  file paths whose names may contain glob-sensitive charac-

       -join  The remaining pattern arguments, after  option  processing,  are
              treated  as  a  single pattern obtained by joining the arguments
              with directory separators.

              Allows an empty list to be returned without error; without  this
              switch an error is returned if the result list would be empty.

       -path pathPrefix
              Search for files with the given pathPrefix where the rest of the
              name matches the given patterns. This allows searching for files
              with  names  similar to a given file (as opposed to a directory)
              even when the  names  contain  glob-sensitive  characters.  This
              option may not be used in conjunction with -directory. For exam-
              ple, to find all files with the same root  name  as  $path,  but
              differing  extensions, you should use "glob -path [file rootname
              $path] .*"  which will work  even  if  $path  contains  numerous
              glob-sensitive characters.

       -tails Only  return  the part of each file found which follows the last
              directory named in any -directory or -path  path  specification.
              Thus  "glob  -tails -directory $dir *" is equivalent to "set pwd
              [pwd]; cd $dir; glob *; cd $pwd".  For -path specifications, the
              returned  names  will  include  the  last path segment, so "glob
              -tails -path [file rootname ~/foo.tex] .*"   will  return  paths
              like foo.aux foo.bib foo.tex etc.

       -types typeList
              Only  list  files or directories which match typeList, where the
              items in the list have two forms. The first  form  is  like  the
              -type option of the Unix find command: b (block special file), c
              (character special file), d (directory), f (plain file), l (sym-
              bolic link), p (named pipe), or s (socket), where multiple types
              may be specified in the list.  Glob will return all files  which
              match at least one of the types given.  Note that symbolic links
              will be returned both if -types l is given, or if the target  of
              a  link  matches  the  requested type. So, a link to a directory
              will be returned if -types d was specified.

              The second form specifies types where all the types  given  must
              match.   These  are  r,  w, x as file permissions, and readonly,
              hidden as special permission  cases.  On  the  Macintosh,  MacOS
              types  and  creators are also supported, where any item which is
              four characters long is assumed to be a MacOS type (e.g.  TEXT).
              Items  which are of the form {macintosh type XXXX} or {macintosh
              creator XXXX} will match types or creators respectively.  Unrec-
              ognized  types,  or  specifications of multiple MacOS types/cre-
              ators will signal an error.

              The two forms may be mixed, so -types {d f r w}  will  find  all
              regular  files OR directories that have both read AND write per-
              missions.  The following are equivalent:

                     glob -type d *
                     glob */

              except that the first case doesn't return the trailing  "/"  and
              is more platform independent.

       --     Marks  the end of switches. The argument following this one will
              be treated as a pattern even if it starts with a -.

       The pattern arguments may contain any of the following special  charac-
       ters, which are a superset of those supported by string match:

       ?         Matches any single character.

       *         Matches any sequence of zero or more characters.

       [chars]   Matches  any  single  character in chars. If chars contains a
                 sequence of the form a-b then any character between a  and  b
                 (inclusive) will match.

       \x        Matches the character x.

       {a,b,...} Matches any of the sub-patterns a, b, etc.

       On  Unix,  as with csh, a "." at the beginning of a file's name or just
       after a "/" must be matched explicitly or with a {}  construct,  unless
       the -types hidden flag is given (since "." at the beginning of a file's
       name indicates that it is hidden). On other platforms, files  beginning
       with a "." are handled no differently to any others, except the special
       directories "." and ".." which must be matched explicitly (this  is  to
       avoid  a  recursive pattern like "glob -join * * * *" from recursing up
       the directory hierarchy as well as down). In addition, all "/"  charac-
       ters must be matched explicitly.

       If  the  first character in a pattern is "~" then it refers to the home
       directory for the user whose name follows the "~".  If the "~" is  fol-
       lowed  immediately  by "/" then the value of the HOME environment vari-
       able is used.

       The glob command differs from csh globbing in two ways.  First, it does
       not  sort  its  result list (use the lsort command if you want the list
       sorted).  Second, glob only returns the names of  files  that  actually
       exist;  in csh no check for existence is made unless a pattern contains
       a ?, *, or [] construct.

       When the glob command returns relative paths whose filenames start with
       a  tilde  "~"  (for example through glob * or glob -tails, the returned
       list will not quote the tilde with "./".  This means care must be taken
       if those names are later to be used with file join, to avoid them being
       interpreted as absolute paths pointing to a given  user's  home  direc-

       For  Windows  UNC names, the servername and sharename components of the
       path may not contain ?, *, or [] constructs. On Windows NT, if  pattern
       is  of  the form "~username@domain", it refers to the home directory of
       the user whose account information resides on the specified  NT  domain
       server.  Otherwise, user account information is obtained from the local

       Since the backslash character has a special meaning to  the  glob  com-
       mand,  glob patterns containing Windows style path separators need spe-
       cial care. The pattern "C:\\foo\\*" is interpreted as "C:\foo\*"  where
       "\f" will match the single character "f" and "\*" will match the single
       character "*" and will not be interpreted as a wildcard character.  One
       solution  to  this  problem is to use the Unix style forward slash as a
       path separator. Windows style paths can  be  converted  to  Unix  style
       paths with the command "file join $path" or "file normalize $path".

       Find all the Tcl files in the current directory:

              glob *.tcl

       Find  all  the  Tcl files in the user's home directory, irrespective of
       what the current directory is:

              glob -directory ~ *.tcl

       Find all subdirectories of the current directory:

              glob -type d *

       Find all files whose name contains an "a", a "b" or the sequence "cde":

              glob -type f *{a,b,cde}*

       See attributes(7) for descriptions of the following attributes:

       |Availability   | runtime/tcl-8    |
       |Stability      | Uncommitted      |


       exist, file, glob, pattern

       Source code for open source software components in Oracle  Solaris  can
       be found at https://www.oracle.com/downloads/opensource/solaris-source-

       This    software    was    built    from    source     available     at
       https://github.com/oracle/solaris-userland.    The  original  community
       source was downloaded from  http://prdownloads.sourceforge.net/tcl/tcl-

       Further information about this software can be found on the open source
       community website at https://www.tcl.tk/.

Tcl                                   8.3                             glob(1t)