Armazene um nome de arquivo em uma variável menos a extensão

3

Arquivo: test.zip

Script de bash

while read filename; do
zip_file=${filename}
# do stuff    
done; 

Valor armazenado na variável="teste"

    
por JohnnyBizzle 24.05.2015 / 16:00

3 respostas

4

Use bash expansão de parâmetros :

zip_file="${filename}"
new_name="${zip_file%.*}"   
  • new_name conterá o nome test se o zip_file tiver test.zip

  • Se o zip_file tiver test.foo.zip , new_name terá test.foo , se você quiser apenas test de test.foo.zip use:

    new_name="${zip_file%%.*}"
    
por heemayl 24.05.2015 / 16:05
1

heemail ainda está certo: exemplo:

full_path=/foo/bar/baz.zip
file_name="${full_path##*/}"
name="${file_name%.*}"
    
por Stephen 24.05.2015 / 17:00
0

Usando sed :

zip_file="$(<<< "${filename}" sed -r 's/^(.*)\..*//')"
  • zip_file="$( [...] )" : atribui o stdout de uma subshell invocada à variável zip_file como uma string
  • <<< "${filename}" [...] : redireciona o conteúdo da variável ${filename} para o stdin do subshell invocado como uma string
  • sed -r 's/^(.*)\.//' : edita o conteúdo do stdin do subshell invocado usando expressões regulares estendidas, combinando a cadeia inteira e substituindo-a pela substring correspondente a cada caractere desde o início até o último ponto

Editar : Tendo visto seu comentário para a resposta de heemayl, para substituir com a substring correspondente a todos os caracteres da última barra até o último ponto:

zip_file="$(<<< "${filename}" sed -r 's/^.*\/(.*)\..*//')"
    
por kos 24.05.2015 / 17:25

Tags