23.21 Removing Every File but OneOne problem with UNIX: it's not terribly good at "excluding" things. There's no option to rm that says, "Do what you will with everything else, but please don't delete these files." You can sometimes create a complex wildcard expression (1.16 ) that does what you want - but sometimes that's a lot of work, or maybe even impossible. Here's one place where UNIX's command substitution (9.16 ) operators (backquotes) come to the rescue. You can use use ls to list all the files, pipe the output into a grep -v or egrep -v (27.3 ) command, and then use backquotes to give the resulting list to rm . Here's what this command would look like: % [Actually, when you're matching just one filename, fgrep -v -x (27.6 ) might be better. -JP ] This command deletes all files whose names end in .txt , except for john.txt . I've probably been more careful than you need to be about making sure there aren't any extraneous matches; in most cases, grep -v john would probably suffice. Using ls -d (16.8 ) makes sure that ls doesn't look into any subdirectories and give you those filenames. The rm -i (21.11 ) asks you before removing each file; if you're sure of yourself, omit the -i . Of course, if you want to exclude two files, you can do that with egrep : % (Not all egrep
implementations support the -v
option.
Don't forget to quote the vertical bar ( Another solution is the nom (15.9 ) script. - |
|