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

Read now

Unlock full access

More than 5,000 organizations count on O’Reilly

AirBnbBlueOriginElectronic ArtsHomeDepotNasdaqRakutenTata Consultancy Services

QuotationMarkO’Reilly covers everything we've got, with content to help us build a world-class technology community, upgrade the capabilities and competencies of our teams, and improve overall team performance as well as their engagement.
Julian F.
Head of Cybersecurity
QuotationMarkI wanted to learn C and C++, but it didn't click for me until I picked up an O'Reilly book. When I went on the O’Reilly platform, I was astonished to find all the books there, plus live events and sandboxes so you could play around with the technology.
Addison B.
Field Engineer
QuotationMarkI’ve been on the O’Reilly platform for more than eight years. I use a couple of learning platforms, but I'm on O'Reilly more than anybody else. When you're there, you start learning. I'm never disappointed.
Amir M.
Data Platform Tech Lead
QuotationMarkI'm always learning. So when I got on to O'Reilly, I was like a kid in a candy store. There are playlists. There are answers. There's on-demand training. It's worth its weight in gold, in terms of what it allows me to do.
Mark W.
Embedded Software Engineer

You might also like

The Linux Command Line, 2nd Edition

The Linux Command Line, 2nd Edition

William E. Shotts
Linux Fundamentals

Linux Fundamentals

Sander van Vugt
Learning Modern Linux

Learning Modern Linux

Michael Hausenblas

Publisher Resources

ISBN: 9781098113391Errata Page