Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

I'm always wondering: most GNU/Unix tools take options in the form "minus something", sometimes followed by an argument. What if you got a file named minus something?

$ ls
-f
$ rm -f
$ ls
-f
$ mv -f abc
mv: missing destination file operand after `abc'
Try `mv --help' for more information.
$ cat -f
cat: invalid option -- 'f'
Try `cat --help' for more information.

or

$ ls
-ohello.c
$ gcc -ohello -ohello.c
gcc: fatal error: no input files
compilation terminated.

This is just out of curiosity; I don't have a use case for this.

share|improve this question
    
You have to find a way of passing literally the string "-f" to the system call. Normally that's by careful escaping. –  Flexo May 1 '12 at 14:11
2  
To the 'close because off-topic' voter: This is a question about shell programming and how to avoid a problem. It is totally on-topic for SO. (OTOH, it is probably a duplicate; the problem is finding the relevant other question.) –  Jonathan Leffler May 1 '12 at 14:15
    
possible duplicate of How do I delete a file named "-p" from bash? –  grawity May 3 '12 at 8:09
add comment

migrated from stackoverflow.com May 3 '12 at 8:07

This question came from our site for professional and enthusiast programmers.

4 Answers

up vote 10 down vote accepted

To remove a file named -x, use rm -- -x (-- means end of options) or rm ./-x.

share|improve this answer
add comment

It is fairly common to ask this type of question in interview settings. A common way to handle files with dashes is either:

$ rm -- -f
$ rm ./-f
share|improve this answer
add comment

A common question in Unix. The main way is to give the full path name to the file, so it doesn't have a dash in front of it:

$ rm -file.txt
unknown option -l

$ rm ./-file.txt    #No problem!
$ rm $PWD/-file.txt #Same thing

Some commands, you can use a dash by itself (or a double dash) to end the options. However, this is not necessarily true with all commands, or even the same command on different systems.

$ rm -- -file.txt   #Works on Linux but not on some Unix systems
share|improve this answer
add comment

you have to use

  rm -- <filename>

Ex:

  rm -- -f
share|improve this answer
    
Some remark wouldn't be wrong. –  user unknown May 2 '12 at 0:40
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.