Filename Expansion (Globbing)

The unappealing word globbing comes from the original command /etc/glob, written by Dennis Ritchie, one of the original authors of Unix. It seems that glob was short for “global” because it was intended that it would search the entire $PATH. The original implementation searched only in /bin, which was considered to be a bug. Today, the which command performs this role of glob, but it is from glob that we now have the word globbing, which means “searching for files using wildcard expansion.” It still does not reference the PATH variable.

The two key characters in filename expansion are the question mark (?) and the asterisk (*). The ? matches any single character; the * matches any sequence of characters. So given a set of files containing various patterns, you can use these wildcards to find the matching files.

$ ls 
abc  abcdef  abcdefghijk  abc.php  abc.txt  ABC.txt   def  mydoc.odt  xyz.xml 
ABC  ABCDEF  abcdef.odt   abctxt   abc.TXT  alphabet  DEF  xyz 
$ ls a* 
abc     abcdefghijk  abc.php  abc.txt  alphabet 
abcdef  abcdef.odt   abctxt   abc.TXT 
$ ls A* 
ABC  ABCDEF  ABC.txt 
$ ls A?? 
ABC 
$ ls a?? 
abc 

This feature is often used to find all files with a given extension. Note that *txt is different from *.txt.

note.ai

Although the convention of .txt, .sh, or .conf at the end of a filename is widely used in Unix and Linux, the extension itself ...

Get Shell Scripting: Expert Recipes for Linux, Bash, and More now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.