Apenas certifique-se de citar seus nomes de arquivo corretamente e não haverá problemas.
for name in ./*; do
newname=${name//[?\"*:]/ }
if [ "$newname" != "$name" ]; then
mv -iv "$name" "$newname"
fi
done
Seu "'"$file"'"
, na verdade, deixa $file
completamente sem aspas (cercado por aspas simples, mas elas não citam a variável ou seu valor, pois elas mesmas são citadas).
Veja também:
Em relação ao seu sed
bit.
sed
tem um pequeno comando que muitos parecem ignorar chamado y
:
sed 'y/?"*:/ /'
Isso mudaria todos os caracteres na primeira parte da expressão para o caractere correspondente na segunda parte (aqui todos os espaços).
tr
também funciona:
tr '?"*:' ' '
Mas, neste caso, seria mais conveniente usar o recurso interno de substituição de parâmetros de bash
para fazer as alterações necessárias.