Out Damn Spot!

| No Comments | No TrackBacks

An interesting, yet common, question came up on the FreeBSD questions mailing list - "How do I delete a file that has a leading dash?" For instance, say you have a file called "-testing". Here's what happens if you try to delete it normally:

$ rm -testing
rm: illegal option -- t
usage: rm [-f | -i] [-dIPRrvW] file ...
unlink file

That's because the rm command thinks the '-t' is supposed to be an option (like the -f to force or the -r for recursive), and it doesn't recognize that option. Your first try might be to quote the file name:

$ rm "-testing"
$ rm \-testing

But that doesn't help, as it isn't the shell that's complaining but rather the rm command, which still sees the "-t" and doesn't understand it.

But as the rm man page reminds you, there are several easy ways around this problem. All of the following will work:

$ rm -- -testing
$ rm /home/usr/-testing
$ rm ./-testing

Because now the '-' isn't the first character. The '--' is a general way of telling pretty much any command that all options have ended and the rest of the command line should be processed as arguments to the command (often filenames). But the most obscure way of doing this had to be the answer using the find command to delete it by its inode number:

$ ls -i
 9232923 -testing
$ find . -inum 9232923 -exec rm {} \;

Isn't Unix wonderful? I was looking forward to seeing the answers to this question, and the thread didn't disappoint. There are so many ways of using the tools to solve problems. The find method would work for other, tough characters too.

No TrackBacks

TrackBack URL: http://linux.amazingdev.com/cgi-bin/mt/mt-tb.cgi/326

Leave a comment

About this Entry

This page contains a single entry by Jonathan published on October 21, 2006 2:10 PM.

Port ahoy! was the previous entry in this blog.

Partition Man is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.