Remova uma extensão de arquivo sem distinção entre maiúsculas e minúsculas no Bash

Remova uma extensão de arquivo sem distinção entre maiúsculas e minúsculas no Bash

Quero remover o sufixo de um arquivo usando basenameum script Bash. O comando remove o sufixo apenas diferenciando maiúsculas de minúsculas.

Como posso remover uma extensão sem distinção entre maiúsculas e minúsculas?

Responder1

Se quiser remover uma extensão do Bash, você pode fazer isso sem ferramentas externas. Depois, passe para basename:

$ f=/path/to/some/file.foo.bar
$ basename "${f%.*}"
file.foo

Com uma extensão de maiúsculas e minúsculas:

$ f=/path/to/some/file.foo.Bar
$ basename "${f%.*}"
file.foo

Aqui %estámanipulação de cordas. Ele removerá a substring correspondente mais curta da parte de trás do que está em f. Corresponde .*a um ponto e zero ou mais caracteres, independentemente de maiúsculas e minúsculas.

Responder2

Usar expansão de parâmetros

file=/home/johndoe/cv.DOC
basename ${file%.[Dd][Oo][Cc]}

informação relacionada