O'Reilly logo

Shell Scripting: Expert Recipes for Linux, Bash, and More by Steve Parker

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

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 ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required