Quando você passar um argumento começando com um traço para um comando, e você não quiser que este argumento seja interpretado como uma opção, passe --
(traço duplo) como um argumento primeiro. Com quase todos os comandos, --
significa "não há mais opções depois disso".
rename.ul -- '-' '' -*
Outra possibilidade é organizar o argumento para não começar com um traço. Isso nem sempre é possível, mas, para um nome de arquivo, é: adicione ./
na frente.
rename.ul ./- ./ ./-*
Note que você não precisa de um loop - rename
está feliz com uma lista de arquivos como argumentos. Além disso, você não precisa passar o nome do arquivo inteiro, apenas a parte que deseja renomear. (Na verdade, um dos problemas com o seu script é que você está misturando as coisas, passando o nome do arquivo inteiro como uma string para substituir, mas passando uma lista de todos os arquivos a cada vez.)
Também coloque sempre aspas duplas em torno de substituições de variáveis , caso contrário seu script não funcionará com nomes de arquivos que contenham espaços.