No analice los nombres de archivo con sed! La salida de echo "$file"puede no ser confiable.
Uso rename. En 17.10 necesitas instalarlo primero
sudo apt install rename
Luego:
rename -n -- 's/[^-A-Za-z0-9_ .]/_/g' *
Notas
- eliminar
-ndespués de probar para cambiar el nombre de los archivos
-- fin de opciones en caso de que algún archivo comience con -
[^-A-Za-z0-9_ .]caracteres que no queremos reemplazar: poner -primero o último para que no pueda indicar un rango (se trata literalmente en estas posiciones).
- Se pueden incluir espacios en la clase
. se trata literalmente (en otros contextos regex significa cualquier carácter y necesita ser escapado).
Esto también funciona en sed:
$ echo 'trip: hill' | sed 's/[^-A-Za-z0-9 _.]/_/g'
trip_ hill
Si agrego un espacio al final en su versión, aparece un error:
$ echo 'trip: hill' | sed -e 's/[^A-Za-z0-9._- ]/_/g'
sed: -e expression #1, char 22: Invalid range end
Pero con -al final, funciona:
$ echo 'trip: hill' | sed -e 's/[^A-Za-z0-9._ -]/_/g'
trip_ hill
Entonces, tal vez la posición del guión causó su problema cuando agregó el espacio. ¡Pero el consejo de no analizar nombres de archivos es válido!