obtendo o nome do arquivo do caminho de entrada para o arquivo em scripts shell [duplicados]

0

Digamos que eu tenha um script chamado script.sh

No shell eu digito

script.sh ../folder/file.py

e nesse arquivo eu sei que echo $1 irá gerar ../folder/file.py

Mas existe alguma maneira de obter apenas o nome do arquivo sem a extensão ... file apenas?

    
por deostroll 23.11.2011 / 03:59

2 respostas

2

A BASH tem um número de operadores de string que você pode usar aqui, mas eu não Veja como fazer isso em apenas um, então você pode usar duas declarações ou um subshell:

echo 'basename ${1%.py}'

Ou, mais geralmente,

echo 'basename ${1%.*}'

Ou com uma variável temporária:

FILE=${1##*/}
echo ${FILE%.*}

Suponho que, desde que você esteja usando um subshell, sed funcionará também.

echo 'echo $1 | sed 's/.*\/\([^/]*\)\(\.[^./]*\)\?//''

Essa é uma expressão um tanto quanto feia, mas poderia ser limpa se você fizesse algumas suposições sobre a entrada.

    
por 23.11.2011 / 04:37
0

se a sua extensão é sempre delimitada pelo ponto e os nomes dos arquivos não têm ponto (s), você pode usar a maneira simples:

echo $(basename $1) | cut -d. -f1

Mas definitivamente o melhor caminho é o descrito acima por Kevin.

    
por 23.11.2011 / 04:18