Não analise nomes de arquivos com sed
! A saída de echo "$file"
pode não ser confiável.
Use rename
. Em 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 realmente renomear os arquivos -
--
fim de opções no caso de qualquer arquivo começar com-
-
[^-A-Za-z0-9_ .]
caracteres que não queremos substituir - coloque-
primeiro ou último para que não possa indicar um intervalo (ele é tratado literalmente nessas posições). - Espaços podem ser incluídos na classe
-
.
é tratado literalmente (em outros contextos regex, significa qualquer caractere e precisa ser ignorado).
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
Então, talvez a posição do hífen tenha causado o seu problema quando você adicionou o espaço. Mas o conselho para não analisar nomes de arquivo permanece!