From the man page for mv
, the first (and possibly second) argument on the command line, if it begins with a -
, is an option and not a file. Only -f | -i | -n
are allowed options.
Simplest way is not to use -
in a file name—it will confuse other command line programs—given that prepending -
is a workaround for something else I would just not use that character.
If this is not an option, you can rewrite the mv
commands like this
mv ./"$f" "${DIRNAME}/${FILENAME:2}"
or (a bit more generic because it then also works for absolute paths)
mv -- "$f" "${DIRNAME}/${FILENAME:2}"
Another option (and is what I would do for any bash script longer than a few lines) is write in a scripting language like perl or python - in this case they solve the problem by their move functions not passing the filenames to mv