≡ Menu

Linux/UNIX: Move File Starting With A Dash

In Unix or Linux operating systems, how do I move file(s) starting with a dash (e.g., /home/you/--filename.txt or /home/you/-filename.txt)?

Many meta-characters such as semicolons, spaces, backslashes, dollar signs, question marks, and asterisks are characters that are interpreted under Unix as commands. - or -- interpreted as an option passed to the command. Try the following suggestions for moving (mv) or copying (cp) these files.

Create Test File

Type the following command:

cd /tmp/
> '-foo.txt'
> '--bar.txt'

List Files Starting With a Dash

Try to list them, enter:

ls -l *.txt

You will get an error as follows:

ls: unrecognized option '--bar.txt'
Try `ls --help' for more information.

To delimit the option list use -- i.e. type the following command:

ls -l -- *.txt

cp and mv commands

Same can be used to copy or move files:

cp -- '--bar.txt' /path/to/dest


cp -v -- '--bar.txt' /path/to/dest

To move files:

mv -- '--bar.txt' /path/to/dest


mv -v -- '--bar.txt' /path/to/dest

In short the syntax is as follows:

cp options -- '--filename' /dest
mv options -- '--filename' /dest

The -- delimit the option list. Later arguments, if any, are treated a operands even if they begin with - or --. This applies to all commands such as rm, cp, mv, ls, ln and so on:

 command -- 'file'
command [options] -- 'file'
rm -- '--filename'
rm -fr -- '-dirname'
rmdir -- '--dirname'

{ 13 comments… add one }

  • Zdenek Styblik February 21, 2010, 11:21 am

    touch — ‘-foo.txt’ in case you’re getting error (in Bash) :)

  • Philippe Petrinko February 21, 2010, 11:56 am

    @Vivek – You are right, Zdenek, [touch] code is wrong in Bash, without [–] end-of-option marker, you cannot use

    touch '--DoubleDashName'
    touch '-OneDashName'

    or you could alternatively use [current directory prefix]:
    reading manual [man rm] gives you two tips : second one is using [./] prefix.

    touch ./-YouCantRemoveMeSimply
    rm ./-YouCantRemoveMeSimply

  • nixCraft February 21, 2010, 1:37 pm

    @ Zdenek: I’ve now used > without giving out any hint about ‘–‘ to new users.

    @Philippe: :)

  • Daniel Morgan February 21, 2010, 2:03 pm

    What about files that start with a tilde ‘~’? In particular say someone has happily created a single file called ‘~’ and you have to delete it?

  • nixCraft February 21, 2010, 2:11 pm

    rm '~'

    Or use inode to delete the same.

  • Philippe Petrinko February 21, 2010, 2:43 pm

    @Vivek regarding CurrentDirectoryPrefix
    Why don’t you add this tip ( ./ ) , like for many other topics where you give more than one way to do it (You usually seem to have the “There Is More Than One Way To Do It (TIMTOWTDI)” spirit ! :-) )

    @Vivek regarding inode, you may have a little more than that to say, don’t you ? (explain find )

    Anyway, this topic is a subtopic of the general need to deal with a file which name is difficult to handle, do you feel like creating it someday? (not only dash, but star, etc)?

  • Chris F.A. Johnson February 21, 2010, 4:02 pm

    The easy way to remove /home/you/–filename.txt is:

    rm /home/you/--filename.txt

  • xxerin August 28, 2011, 10:07 am

    Thanks. I was having trouble moving files.

  • Charles Marketing February 3, 2012, 2:51 pm

    Thanks for taking the time to explain this.


  • a May 15, 2013, 6:06 am

    # rm -rf ./\-1931673251/

  • Ricky September 4, 2013, 5:31 pm

    I had issue trying to delete a file named ‘-d’, but for some odd reasons, the above suggestions didn’t work for me, giving me the No such file or directory. What I then tried was using the vim command on the directory the file is on (bringing up vim’s file navigation) and was able to visually select the file and delete it that way.

  • Wastrel May 8, 2014, 5:25 am

    Yeah. LOL. Well, this is simply a bug that will never get fixed, because we know about it. The command reads the output as part of the command PROBLEM SOLVED NEXT PROBLEM PLEASE

  • Srikanth October 25, 2014, 3:51 am

    didnt worked solved my giving full path to access cat ./-filename

Leave a Comment

   Tagged with: , , , , , , , , , , , , , , , , , , , , , , , , , , , ,