Copiar o nome do arquivo sem a extensão [RESOLVIDO]

1. Copiar o nome do arquivo sem a extensão [RESOLVIDO]

Mac
Skylen

(usa Debian)

Enviado em 16/08/2019 - 18:19h

Boa noite,

Estou montado um programa que prescisa copiar o nome de arquivo, pórem sem a sua extensão.
Este código copia a extensão, pode ser usado, mas não tenho ideia de como...

ext7=$(echo $pesquisa | rev | cut -c 1-7 | rev) 


Desde já agradeço pela ajuda!!!!!


  


2. Re: Copiar o nome do arquivo sem a extensão [RESOLVIDO]

Matheus
pylm

(usa Gentoo)

Enviado em 16/08/2019 - 19:03h


ext7=$(echo $pesquisa | rev | cut -d '.' -f 2 | rev)


Daqui a pouco devem aparecer os magos do shell script com uma solução melhor.


3. Re: Copiar o nome do arquivo sem a extensão [RESOLVIDO]

Mac
Skylen

(usa Debian)

Enviado em 16/08/2019 - 20:16h

Vou explicar melhor o código

Eu uso o comando find para pesquisar o arquivo, que no caso é todos os tipos de comprimidos em tar

O código descomprimir o arquivo, logo agora precisa entrar na pasta que descomprimiu.
Nota: existe outras pastas.

Simplificando:
Eu fiz dessa forma...

arq=$(find -iname "*.tar.gz")
echo "$arq" >> /home/mac/teste
sed 's/.tar.gz//g' /home/mac/teste
doc=$(cat /home/mac/teste)
echo "$doc"


4. Re: Copiar o nome do arquivo sem a extensão [RESOLVIDO]

Ryuk Shinigami
Ryuk

(usa Nenhuma)

Enviado em 16/08/2019 - 20:29h

Usando "rev" e "cut":
var=arquivo.nome.tar.gz ; echo $var | rev | cut -d. -f1,2 --complement | rev 

No bash dá pra manipular diretamente a variável:
var=arquivo.tar.gz ; echo ${var%.tar.gz} 

Ou seja, caso "var=arquivo.nome.tar.gz", isso aqui "${var%.tar.gz}" mostra o conteúdo da variável sem ".tar.gz", sacou!



5. Re: Copiar o nome do arquivo sem a extensão [RESOLVIDO]

Mac
Skylen

(usa Debian)

Enviado em 17/08/2019 - 12:56h

Ryuk , deu certo, pórem não está entrando na pasta por causa do ponto ./ antes do nome do programa.


6. Re: Copiar o nome do arquivo sem a extensão [RESOLVIDO]

Ryuk Shinigami
Ryuk

(usa Nenhuma)

Enviado em 17/08/2019 - 17:45h


Skylen escreveu:

Ryuk , deu certo, pórem não está entrando na pasta por causa do ponto ./ antes do nome do programa.


Mostre o script completo.


7. Re: Copiar o nome do arquivo sem a extensão [RESOLVIDO]

Mac
Skylen

(usa Debian)

Enviado em 19/08/2019 - 10:45h

Bom dia,
Desculpem a demora, vou colocar só as funções que involve o problema, pois o programa já está grande...

# -> O Instalar extrai de arcodo com a extenção de forma independente.
extrator() {
echo " Extrator"
echo ">>>>>>>>>> ------------------------------------------- <<<<<<<<<<"
echo

local_pasta
cd $caminho/$pasta
local_pasta
ls -la
enter

# Variáveis para a comparação.
pesquisa=$(find -iname "*.tar.gz" -o -iname "*.tar" -o -iname "*.tar.bz" -o -iname "*.tar.bz2" -o -iname "*.tar.xz" -o -iname "*.zip" -o -iname "*.tgz")
ext7=$(echo $pesquisa | rev | cut -c 1-7 | rev)
ext8=$(echo $pesquisa | rev | cut -c 1-8 | rev)
ext4=$(echo $pesquisa | rev | cut -c 1-4 | rev)
exts=$(echo $pesquisa | rev | cut -d '.' -f1,2 --complement | rev)

###################

if [ "$ext7" == ".tar.gz" ]; then
echo
ls -l
echo
tar -xzvf $pesquisa
rm $pesquisa
echo
echo "Extração concluida!!!"
echo
ls -l
enter
verificar_arquivos

elif [ "$ext4" == ".tgz" ]; then
echo
ls -l
echo
tar -xzvf $pesquisa
rm $pesquisa
echo
echo "Extração concluida!!!"
echo
ls -l
enter
verificar_arquivos

elif [ "$ext7" == ".tar.bz" ]; then
echo
ls -l
echo
tar -xjvf $pesquisa
rm $pesquisa
echo
echo "Extração concluida!!!"
echo
ls -l
enter
verificar_arquivos

elif [ "$ext8" == ".tar.bz2" ]; then
echo "$pesquisa"
echo
ls -l
echo
tar -jxvf $pesquisa
rm $pesquisa
echo
echo "Extração concluida!!!"
echo
ls -l
enter
verificar_arquivos

elif [ "$ext7" == ".tar.xz" ]; then
echo
ls -l
echo
tar -xJvf $pesquisa
rm $pesquisa
echo
echo "Extração concluida!!!"
echo
ls -l
enter
verificar_arquivos

elif [ "$ext4" == ".zip" ]; then
echo
ls -l
echo
unzip -v $pesquisa
rm $pesquisa
echo
echo "Extração concluida!!!"
echo
ls -l
enter
verificar_arquivos

elif [ "$ext4" == ".tar" ]; then
echo
ls -l
echo
tar -xvf $pesquisa
rm $pesquisa
echo
echo "Extração concluida!!!"
echo
ls -l
enter
verificar_arquivos

else
echo
echo "Ouve algum erro!!!"
echo
echo " :("
echo
remover_variaveis
exit 1

fi
}
###################
# -> O Instalar verifica a existência dos arquivos:
# INSTALL, README, configure, Makefile, README.linux,
# dependendo de qual seja ele segue para função instalar ou sai do programa.
verificar_arquivos() {
echo ">>>>>>>>>> ------------------------------------------- <<<<<<<<<<"
echo " Verificar Arquivos de Instalação"
sleep 0.5
echo
local_pasta
ls -la # Tenho que está no caminho /$caminho/$pasta.
echo $exts


enter
# A função log faz o registro do programa instalado.
log(){
echo "#####################################################"
echo
echo "PROGRAMA: $nome_arq"
echo "DATA: `date`"
echo
}
cd $caminho/$pasta$exts
log >> /home/mac/script/log_scripts/source_code_installer-gamma.log
echo "$caminho/$pasta$exts" >> /home/mac/script/log_scripts/caminho_programa.log
ls -la # Estou na pasta que extrai, $nome_arq.
echo
enter
###################
#Variáveis dos arquivos.
install=INSTALL
CONFIGURE=configure
readme=README
make=Makefile
read_linux=README.linux
###################
documento(){
# Condicional verifica se os arquivos se encontra na pasta especificada.
if [ -e "$install" ]; then
echo
echo "Arquivo $install se encontra."
sleep 1
echo
nano $install
sleep 0.5
instalar

elif [ -e "$readme" ]; then
echo
echo "Arquivo $readme se encontra."
sleep 1
echo
nano $readme
sleep 0.5
instalar

elif [ -e "$make]" ]; then
echo
echo "Arquivo $make se encontra."
sleep 1
echo
sleep 0.5
instalar
elif [ -e "$read_linux" ]; then
echo
echo "Arquivo $read_linux se encontra."
sleep 1
echo
nano $read_linux
sleep 0.5
instalar

else # -> Caso não encontre os arquivos...

echo
echo "Arquivos inexistentes."
sleep 1
echo
xdg-open $caminho/$pasta/$nome_arq # -> Abre a pasta do programa.
remover_variaveis
exit

fi
}



8. Re: Copiar o nome do arquivo sem a extensão [RESOLVIDO]

Ryuk Shinigami
Ryuk

(usa Nenhuma)

Enviado em 19/08/2019 - 13:18h

O problema é no resultado do comando "find", que mostra ./?

Coloque caminho completo da pasta no comando:
find /local/pasta -iname *.tar.gz ... 

ou um asterisco *:
find * -iname *.tar.gz ... 

ou assim:
find -iname *.tar.gz -printf '%P\n' ... 





9. Re: Copiar o nome do arquivo sem a extensão [RESOLVIDO]

Mac
Skylen

(usa Debian)

Enviado em 20/08/2019 - 10:22h

Vou tentar, depois notificou aqui.Sobre o find acredito que mostre a /, sim... Mas depois confimo...


10. Re: Copiar o nome do arquivo sem a extensão

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 20/08/2019 - 18:27h

Boa noite, segue sugestão:

for arq in $(ls -1 *.{tar.gz,tar,tar.bz,tar.bz2,tar.xz,zip,tgz} 2>/dev/null);do
NC=$(awk -F'.' '{print NF}' <<< $arq);
if ((NC>3));then
ext=$(cut -d'.' -f$((NC-1))- <<< $arq)
nome=$(cut -d'.' -f1,-$((NC-2)) <<< $arq
else
nome=$(cut -d'.' -f1 <<< $arq)
ext=$(cut -d'.' -f2- <<< $arq)
fi
echo -e "\nArq: $arq Nome: $nome Ext: $ext\n"
case "${ext}" in
tar.gz) echo " Comandos para Descompactar \"tar.gz\"" ;;
tar) echo " Comandos para Descompactar \"tar\"" ;;
tar.bz) echo " Comandos para Descompactar \"tar.bz\"" ;;
tar.bz2) echo " Comandos para Descompactar \"tar.bz2\"" ;;
tar.xz) echo " Comandos para Descompactar \"tar.xz\"" ;;
zip) echo " Comandos para Descompactar \"zip\"" ;;
tgz) echo "Comandos para Descompactar \"tgz\"" ;;
esac
done

Importante => echo -e "$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')"
Att.: Marcelo Oliver


11. Re: Copiar o nome do arquivo sem a extensão [RESOLVIDO]

Mac
Skylen

(usa Debian)

Enviado em 22/08/2019 - 16:08h

Boa tarde,
Ryuk, deu certo a sugestão que passou. Obrigado a todos pela ajuda!!!!

msoliver, testei sua sugestão, essa foi a saída do programa:

Arq: opus-1.3.1.tar.gz Nome: opus-1 Ext: 3.1.tar.gz

Caso modifique 2 por 4, ou seja, para o quarto ponto:
exts=$(cut -d'.' -f4- <<< $arq) 


Saída:
Arq: opus-1.3.1.tar.gz Nome: opus-1 Ext: tar.gz

Mas para dar certo tenho que modificar para:

exts=$(echo $arq | rev | cut -c 1-7 | rev)
nome=$(echo $arq | rev | cut -d '.' -f1,2 --complement | rev)


Saída:
Arq: opus-1.3.1.tar.gz Nome: opus-1.3.1 Ext: .tar.gz

Porém o verdadeiro problema é que cada estenção tem um tamanho diferente
teria que criar uma variável para cada tipo





12. Re: Copiar o nome do arquivo sem a extensão

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 22/08/2019 - 17:14h

Skylen escreveu:

Boa tarde,
Ryuk, deu certo a sugestão que passou. Obrigado a todos pela ajuda!!!!

msoliver, testei sua sugestão, essa foi a saída do programa:

Arq: opus-1.3.1.tar.gz Nome: opus-1 Ext: 3.1.tar.gz

Caso modifique 2 por 4, ou seja, para o quarto ponto:
exts=$(cut -d'.' -f4- <<< $arq) 


Saída:
Arq: opus-1.3.1.tar.gz Nome: opus-1 Ext: tar.gz

Mas para dar certo tenho que modificar para:

exts=$(echo $arq | rev | cut -c 1-7 | rev)
nome=$(echo $arq | rev | cut -d '.' -f1,2 --complement | rev)


Saída:
Arq: opus-1.3.1.tar.gz Nome: opus-1.3.1 Ext: .tar.gz

Porém o verdadeiro problema é que cada extensão tem um tamanho diferente
teria que criar uma variável para cada tipo

Boa tarde Skylen.
Desculpe a falha.... Não previ o "." "ponto" no nome do arquivo......
Nesse caso devemos contar a quantidade de "campos" usando o "ponto" como separador,
e, caso tenha mais de 3 campos, pegar sempre os dois últimos como extensão.
Exemplo:
#NC=Quantidade de Campos
arq="opus-1.3.1.tar.gz"
NC=$(awk -F'.' '{print NF}' <<< $arq);
if ((NC>3));then
ext=$(cut -d'.' -f$((NC-1))- <<< $arq)
nome=$(cut -d'.' -f1,-$((NC-2)) <<< $arq
else
nome=$(cut -d'.' -f1 <<< $arq)
ext=$(cut -d'.' -f2- <<< $arq)
fi

A alteração foi incluída no script da postagem Nº 10

Importante => echo -e "$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')"
Att.: Marcelo Oliver



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts