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
-n
despué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!