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