Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
glob(n)			     Tcl Built-In Commands		       glob(n)


       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  op-
	      tion  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}*


       exist, file, glob, pattern

Tcl				      8.3			       glob(n)


Want to link to this manual page? Use this URL:

home | help