Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I deal with a filename that starts with the hyphen (-) character?

Tags:

linux

bash

Somehow, at some point, I accidentally created a file in my home directory named '-s'. It is about 500 kb and I have no idea if it contains important data or not. I cannot figure out any way to do anything with this file, because every command I use to try to view, copy, or move it interprets the filename as an argument.

I've tried putting it in quotes, escaping it with a backslash, a combination of the two, nothing seems to work.

Also, when I first posed this question to my coworkers, we puzzled over it for a while until someone finally overheard and asked "why don't you just rename it?" After I explained to him that cp and mv both think the filename is an argument so it doesn't work, he said "no, not from the command line, do it from Gnome." I sheepishly followed his advice, and it worked. HOWEVER I'm still interested in how you would solve this dilemma if you didn't have a window manager and the command line was the only option.

like image 413
crudcore Avatar asked Apr 15 '11 13:04

crudcore


People also ask

Can a filename start with a dash?

Don't start or end your filename with a space, period, hyphen, or underline. Keep your filenames to a reasonable length and be sure they are under 31 characters. Most operating systems are case sensitive; always use lowercase.

What is a dashed filename?

Because dash (-) is generally used by commands to specify options and arguments. In this tutorial, we will show you how to create, remove, list, read and copy filename starts with a dash (-).


2 Answers

You can refer to it either using ./-filename or some command will allow you to put it after double dash:

rm -- -filename 
like image 153
Michael Krelin - hacker Avatar answered Sep 19 '22 16:09

Michael Krelin - hacker


You can get rid of it with:

rm ./-s 

The rm command (at least under Ubuntu 10.04) even tells you such:

pax@pax-desktop:~$ rm -w rm: invalid option -- 'w' Try `rm ./-w' to remove the file `-w'. Try `rm --help' for more information. 

The reason that works is because rm doesn't think it's an option (since it doesn't start with -) but it's still referring to the specific file in the current directory.

like image 34
paxdiablo Avatar answered Sep 16 '22 16:09

paxdiablo