Usando bash
:
f="Test File@#!!.txt"
f="${f// /_}"
f="${f//[^[:alnum:].]/}"
f="${f,,?}"
mkdir -p "$__PATH$f"
Explicação:
-
f="${f// /_}"
Isso substitui todos os espaços por sublinhados. O uso de aspas duplas aqui é opcional. Até que alguém se torne hábil nos muitos casos especiais do shell, no entanto, é uma boa prática colocá-los em qualquer lugar onde uma variável é usada.
-
f="${f//[^[:alnum:].]/}"
Isso usa outra expansão de parâmetro do bash para remover todos os caracteres não alfanuméricos, exceto por períodos. (Eu estava supondo que você pode querer mantê-los.)
Se você quiser remover períodos também, substitua esta linha por:
'f="${f//[^[:alnum:]]/}"'
-
f="${f,,?}"
tr
é a ferramenta tradicional que converte maiúsculas para minúsculas. Esta linha usa uma das expansões de parâmetro internas do bash para fazer a conversão. -
mkdir -p "$__PATH$f"
A menos que se queira que o shell processe as variáveis do shell, é mais seguro colocá-las entre aspas duplas.