Remover uma extensão de arquivo de forma insensível no Bash

6

Eu quero remover o sufixo de um arquivo usando basename em um script Bash. O comando remove o sufixo apenas de uma maneira que diferencia maiúsculas e minúsculas.

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

    
por ironsand 20.08.2013 / 16:19

2 respostas

13

Se você quiser remover uma extensão no Bash, poderá fazer isso sem ferramentas externas. Em seguida, passe para basename :

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

Com uma extensão de casos mistos:

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

Aqui, % é manipulação de string . Ele removerá a substring de correspondência mais curta da parte de trás do que está em f . O .* corresponde a um ponto e zero ou mais caracteres, independentemente do caso.

    
por 20.08.2013 / 16:27
3

Use a expansão de parâmetros

file=/home/johndoe/cv.DOC
basename ${file%.[Dd][Oo][Cc]}
    
por 20.08.2013 / 16:26