Skip to Content
Efficient Linux at the Command Line
book

Efficient Linux at the Command Line

by Daniel J. Barrett
February 2022
Intermediate to advanced
248 pages
5h 46m
English
O'Reilly Media, Inc.
Book available
Content preview from Efficient Linux at the Command Line

... character after the asterisk:

$ ls
123  a.txt   b.txt   c.txt  dont-delete-me  important-file  passwords
$ rm * .txt       DANGER!! Don't run this! Deletes the wrong files!

The most common solution to this hazard is to alias rm to run rm -i so it prompts for confirmation before each deletion:

$ alias rm='rm -i'                  Often found in a shell configuration file
$ rm *.txt
/bin/rm: remove regular file 'a.txt'? y
/bin/rm: remove regular file 'b.txt'? y
/bin/rm: remove regular file 'c.txt'? y

As a result, an extra space character needn’t be fatal, because the prompts from rm -i will warn that you’re removing the wrong files:

$ rm * .txt
/bin/rm: remove regular file '123'?      Something is wrong: kill the command

The alias solution is cumbersome, however, because most of the time you might not want or need rm to prompt you. It also doesn’t work if you’re logged into another Linux machine without your aliases. I’ll show you a better way to avoid matching the wrong filenames with a pattern. The technique has two steps and relies on history expansion:

  1. Verify. Before running rm, run ls with the desired pattern to see which files match.

    $ ls *.txt
    a.txt   b.txt   c.txt
  2. Delete. If the output of ls looks correct, run rm !$ to delete the same files that were matched.2

    $ rm !$
    rm *.txt

The history expansion !$ (“bang dollar”) means “the final word that you typed in the previous command.” Therefore, rm !$ here is shorthand for “delete whatever I just listed with ls,” namely, *.txt. If you accidentally add a space after ...

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Start your free trial

You might also like

The Linux Command Line, 2nd Edition

The Linux Command Line, 2nd Edition

William E. Shotts
Learning Modern Linux

Learning Modern Linux

Michael Hausenblas

Publisher Resources

ISBN: 9781098113391Errata PageSupplemental Content