Não analise nomes de arquivos com sed
! A saída de echo "$file"
pode não ser confiável.
Use rename
. Na 17.10, você precisa instalá-lo primeiro
sudo apt install rename
Então:
rename -n -- 's/[^-A-Za-z0-9_ .]/_/g' *
Notas
- remova
-n
após o teste para renomear os arquivos
--
fim de opções, caso algum arquivo comece com -
[^-A-Za-z0-9_ .]
caracteres que não queremos substituir - coloque o -
primeiro ou o último para que não possa indicar um intervalo (é tratado literalmente nessas posições).
- Os espaços podem ser incluídos na classe
.
é tratado literalmente (em outros contextos regex, significa qualquer caractere e precisa ser escapado).
Isso também funciona em sed
:
$ echo 'trip: hill' | sed 's/[^-A-Za-z0-9 _.]/_/g'
trip_ hill
Se eu adicionar um espaço ao final da sua versão, recebo um erro:
$ echo 'trip: hill' | sed -e 's/[^A-Za-z0-9._- ]/_/g'
sed: -e expression #1, char 22: Invalid range end
Mas com -
no final, funciona:
$ echo 'trip: hill' | sed -e 's/[^A-Za-z0-9._ -]/_/g'
trip_ hill
Talvez a posição do hífen tenha causado seu problema quando você adicionou o espaço. Mas o conselho para não analisar nomes de arquivos permanece!