home | O'Reilly's CD bookshelfs | FreeBSD | Linux | Cisco | Cisco Exam    

UNIX Power Tools

UNIX Power ToolsSearch this book
Previous: 14.14 Automatic Setup When You Enter/Exit a Directory Chapter 15 Next: 15.2 Filename Wildcards in a Nutshell

15. Wildcards

15.1 File Naming Wildcards

Wildcards ( 1.16 ) are the shell's way of abbreviating filenames. Just as in poker, where a wildcard is a special card that can match any card in the deck, filename wildcards are capable of matching letters, or groups of letters, in the alphabet. Rather than typing a long filename, or a long chain of filenames, a wildcard lets you provide parts of names, and then use some "wildcard characters" for the rest. For example, if you want to delete all files whose names end in .o , you can give the command:


rm *.o

You don't have to list every filename.

I'm sure you already know that wildcards are useful in many situations. If not, they are summarized in article 15.2 . Here are a few of my favorite wildcard applications:

  • If you remember part of a filename, but not the whole name, you can use wildcards to help you find it. If I have a file on genetics saved in a directory with several hundred other files, a command like:

    ls *gene*

    will often find what I want. It's quicker and easier than find ( 17.1 ) .

  • Wildcards are a natural when you want to work with groups of files. If I have a general purpose directory that's full of filenames ending in .c and .h , I can make new subdirectories and use wildcards to move the files easily:

    mkdir c h
    mv *.c c
    mv *.h h

  • Wildcards often help you to work with files with inconvenient characters in their names. Let's say you have a file named abc x e , where x is some unknown control character. You can delete or rename that file by using the wildcarded name abc?e . (When you do this, be careful that your wildcard doesn't match more than you intend.)

  • Wildcards can appear in any component of a pathname. This can often be used to your advantage. For example, let's say that you have a directory named /work , split into subdirectories for a dozen different projects. For each project, you have a schedule, in a file called (obviously enough) schedule.txt . You can print all the schedules with the command:

    lpr /work/*/schedule.txt   
    lp  /work/*/schedule.txt   
    System V UNIX

    (However, you can occasionally run into problems ( 15.6 ) .)

It's a common misconception, particularly among new users, that application programs and utilities have something to do with wildcards. Given a command like grep ident *.c , many users think that grep handles the * and looks to see which files have names that end in .c . If you're at all familiar with UNIX's workings, you'll realize that this is the wrong picture. The shell interprets wildcards. That is, the shell figures out which files have names ending in .c , puts them in a list, puts that list on the command line, and then hands that command line to grep . As it processes the command line, the shell turns grep ident *.c into grep ident file1.c file2.c ... .

Since there are several shells, one might think (or fear!) that there should be several different sets of wildcards. Fortunately, there aren't. The C shell has made one significant extension (the curly brace operators ( 9.5 ) ), and the Korn shell has made a few more, but the basic wildcards work the same for all shells.

- ML

Previous: 14.14 Automatic Setup When You Enter/Exit a Directory UNIX Power Tools Next: 15.2 Filename Wildcards in a Nutshell
14.14 Automatic Setup When You Enter/Exit a Directory Book Index 15.2 Filename Wildcards in a Nutshell

The UNIX CD Bookshelf Navigation The UNIX CD BookshelfUNIX Power ToolsUNIX in a NutshellLearning the vi Editorsed & awkLearning the Korn ShellLearning the UNIX Operating System