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}"