Linux/UNIX: Move File Starting With A Dash

Posted on in Categories , last updated February 21, 2010

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 comment

  1. @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

  2. 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?

  3. @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)?

  4. 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.

  5. 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

Leave a Comment