Criando nome do diretório a partir do nome do arquivo - exclua caracteres não alfanuméricos e coloque letras minúsculas

2

Eu sou capaz de criar um diretório baseado no nome de um arquivo. Eu estou correndo em uma parede se o texto tiver espaços ou caracteres não alfanuméricos. Eu gostaria de remover esses caracteres numéricos não alfanuméricos e transformar o que é deixado em minúsculas. Isso fará com que o nome do diretório. Tentei executar alguns testes, mas não sou capaz de remover os espaços.

Além disso, posso limitar a 25 caracteres?

    __FILE_NAME="Test File@#!!.txt"
    echo ${__FILE_NAME// /_}
    $ echo $__FILE_NAME | tr '[:upper:]' '[:lower:]'
    mkdir -p $__PATH${__FILE_NAME};
    
por Code_Ed_Student 05.10.2014 / 08:18

1 resposta

2

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.

por 05.10.2014 / 08:31