I'm trying to rename a file with a hyphen at the beginning of its name and both this:
mv -example-file-name example-file-name
and this:
mv '-example-file-name' example-file-name
result in:
mv: invalid option -- 'e'
Most GNU/Linux commands allow a --
option to indicate end of options so that subsequent -
prefixed words are not treated as options.
mv -- -example-file-name example-file-name
A small test
$ touch -- -example
$ ls -l -- *ample
-rw-r--r-- 1 rgb rgb 0 Nov 25 09:57 -example
$ mv -- -example example
$
rename
, too. (at least the version that works like rename [options] <expression> <replacement> <file>...
, whichever one that is.)
Oct 10, 2016 at 8:48
RedGrittyBrick's answer is very good. Another option is:
mv ./-example-file-name example-file-name
A small test:
$ touch ./-example
$ ls -l ./*ample
-rw-r--r-- 1 me me 0 Nov 25 16:02 ./-example
$ mv ./-example example
$ ls -l ./*ample
-rw-r--r-- 1 me me 0 Nov 25 16:02 ./example
This trick works for me in times of desperation. YMMV
rename \- '' *
You have to escape the hyphen for rename to recognize it. Why rename doesn't respect single quotes or offer an override of some kind is beyond me.
This is the only method I've seen that reliably handles a leading hyphen using rename. I agree with the other posts on using mv, but if you can't use mv for any reason, this works.
You can use this:
rename -- "s/\-//g" *
that it can rename all file :) if your file name :
-ng--sh-ay-01[------------]-FLV
after run code, your file name become:
ngshay01[]FLV
mv *example-file-name example-file-name
has the same problem, because filename expansion (AKA globbing) happens beforemv
is called.