Como criar um shell script com comando para extrair arquivo?

1. Como criar um shell script com comando para extrair arquivo?

Raphael
broda_linux

(usa Debian)

Enviado em 03/12/2023 - 18:29h

Olá pessoal,

A idéia é a seguinte, tenho usado 'alias' e bagunçado muito o '.zshrc' porém, criei um .sh para os alias. Até aí tudo bem, entretanto, fiquei curioso sobre como converter os alias e/ou criar um script funcional para extrair os arquivos de suas respectivas extensões para determinada pasta. Por exemplo, quero converter os alias e agrupá-los:
alias .jpgz="unzip $HOME/DL.mx/'*.zip' -d $HOME/Arquivos/jpg"
alias .jpgr="unrar x $HOME/DL.mx/'*.rar' $HOME/Arquivos/jpg"
alias .jpg7="7z x $HOME/DL.mx/'*.7z' -o$HOME/Arquivos/jpg"

alias .jpegz="unzip $HOME/DL.mx/'*.zip' -d $HOME/Arquivos/jpeg"
alias .jpegr="unrar x $HOME/DL.mx/'*.rar' $HOME/Arquivos/jpeg"
alias .jpeg7="7z x $HOME/DL.mx/'*.7z' -o$HOME/Arquivos/jpeg"

alias .pngz="unzip $HOME/DL.mx/'*.zip' -d $HOME/Arquivos/png"
alias .pngr="unrar x $HOME/DL.mx/'*.rar' $HOME/Arquivos/png"
alias .png7="7z x $HOME/DL.mx/'*.7z' -o$HOME/Arquivos/png"

Ou seja, zip com zip; rar com rar; 7z com 7z, ficaria:
zip: .jpgz, .pngz, jpegz, etc.

Tenho visto algumas dicas na net e me lembrei de um script que o xerxes fez aqui no VOL e estou tentando fazer um a mesma maneira. Só não sei se estou fazendo algo errado e queria a alguma ideia de como melhora-lo. Segue aqui o código do xerxes:
if [ ! -d "$exdir@" ] ;
then
echo " -> diretório inexistente ou sem permissão de escrita";
exit;
# else
# continue
fi

for x in `ls *.*` ; do
echo $x
case $x in
*.zip)
unzip $x -d $exdir@
;;

*.rar)
unrar x $x $exdir@
;;
*.7z)
7z x $x $exdir@
;;
esac
done

E aqui é o que quero, que é configurar um comando para executar, como no alias. Algo próximo a isso:
if [ ! -d "$exdir@" ] ;
.jpgz = "@1" - $HOME/AX.mx/jpg/ ;
.pngz = "@2" - $HOME/AX.mx/png/ ;
.jpegz = "@3" - $HOME/AX.mx/jpeg/ ;
then
echo " -> diretório inexistente ou sem permissão de escrita";
exit;
# else
# continue
fi

for x in `ls *.*` ; do
echo $x
case $x in
*.zip)
unzip $x -d $exdir@
;;
esac
done

Ou:
if [ ! -d "$exdir@" ] ;
.jpgz = "@1" - $HOME/AX.mx/jpg/
.pngz = "@2" - $HOME/AX.mx/png/
.jpegz = "@3" - $HOME/AX.mx/jpeg/
then
echo " -> diretório inexistente ou sem permissão de escrita";
exit;
# else
# continue
fi

for x in `ls *.*` ; do
echo $x
case $x in
*.zip)
unzip $x -d "$HOME/AX.mx/@ && mv $x $HOME/DL.mx/.backup/
;;
esac
done



  


2. Re: Como criar um shell script com comando para extrair arquivo?

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 04/12/2023 - 12:21h

v aí se isso te ajuda

#!/bin/bash
extensao="${1##*.}"
if [ "$#" -eq 0 ] || [ -z "$extensao" ]; then
echo "Por favor, forneça o nome de um arquivo com extensão."
exit 1
fi

# Verifica qual função deve ser executada com base na extensão
case "$extensao" in
"zip")
# Função a ser executada para arquivos .zip
echo "Executando função para arquivos com extensão .zip"
;;
"rar")
# Função a ser executada para arquivos .rar
echo "Executando função para arquivos com extensão .rar"
;;
*)
# Se a extensão do arquivo não for reconhecida, exibe uma mensagem de erro
echo "Extensão do arquivo não reconhecida."
exit 1
;;
esac


EX:
mauricio@phantom ~/Texte $ ./extrair.sh arq.rar
Executando função para arquivos com extensão .rar
mauricio@phantom ~/Texte $ ./extrair.sh arq.zip
Executando função para arquivos com extensão .zip


------------------------------------------------------| Linux User #621728 |------------------------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------------------| Linux User #621728 |------------------------------------------------------




3. Re: Como criar um shell script com comando para extrair arquivo?

aguamole
aguamole

(usa KUbuntu)

Enviado em 04/12/2023 - 14:45h

Eu entende certo? vc quer escrever um programa usando a linguagem de programação Bash e que esse programa seja um compactador e descompactador de arquivos tipo o Ark do projeto KDE só que em Bash? Acredito que da para fazei esse programa sim usando a linguagem Bash. Da ate para implementar interface de usuário usando o Zenity e o Dialog e outros programas de criar interface para o shell script tem vários que faz interface para os programas em Bash.


4. Re: Como criar um shell script com comando para extrair arquivo?

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 04/12/2023 - 22:58h


Mauriciodez escreveu:


v aí se isso te ajuda

#!/bin/bash
extensao="${1##*.}"
if [ "$#" -eq 0 ] || [ -z "$extensao" ]; then
echo "Por favor, forneça o nome de um arquivo com extensão."
exit 1
fi

# Verifica qual função deve ser executada com base na extensão
case "$extensao" in
"txt")
# Função a ser executada para arquivos .zip
echo "Executando função para arquivos com extensão .zip"
;;
"csv")
# Função a ser executada para arquivos .rar
echo "Executando função para arquivos com extensão .rar"
;;
*)
# Se a extensão do arquivo não for reconhecida, exibe uma mensagem de erro
echo "Extensão do arquivo não reconhecida."
exit 1
;;
esac


EX:
mauricio@phantom ~/Texte $ ./extrair.sh arq.rar
Executando função para arquivos com extensão .rar
mauricio@phantom ~/Texte $ ./extrair.sh arq.zip
Executando função para arquivos com extensão .zip


------------------------------------------------------| Linux User #621728 |------------------------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------------------| Linux User #621728 |------------------------------------------------------


Boa noite Mauriciodez.
De uma 'corrigida' no seu script....

Se "extensão" é txt, echo "Executando função para arquivos com extensão .zip"
Se "extensão" é csv, echo "Executando função para arquivos com extensão .rar"

.... Assim não vai dar certo..... :)


Att.: Marcelo Oliver



5. Re: Como criar um shell script com comando para extrair arquivo?

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 04/12/2023 - 23:45h


msoliver escreveu:
.... Assim não vai dar certo..... :)


Marcelão, bem notado mas explico a falha ... é que fiz o script de teste usando txt e csv e colei assim no fórum, depois que editei e troquei para zip e rar.

------------------------------------------------------| Linux User #621728 |------------------------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------------------| Linux User #621728 |------------------------------------------------------




6. Re: Como criar um shell script com comando para extrair arquivo?

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 06/12/2023 - 12:35h

Mauriciodez escreveu:


msoliver escreveu:
.... Assim não vai dar certo..... :)


Marcelão, bem notado mas explico a falha ... é que fiz o script de teste usando txt e csv e colei assim no fórum, depois que editei e troquei para zip e rar.

------------------------------------------------------| Linux User #621728 |------------------------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------------------| Linux User #621728 |------------------------------------------------------


...
É que fiz o script de teste usando txt e csv ...
Foi o que imaginei....
Faço direto isso, a mania do copiar e colar. Rsrsrsrs


Att.: Marcelo Oliver


7. Re: Como criar um shell script com comando para extrair arquivo?

Raphael
broda_linux

(usa Debian)

Enviado em 08/12/2023 - 17:11h

O que eu queria era saber como converter o alias para um shell script, por exemplo, no alias seria algo onde:

x1 = comando; x2 = a pasta que contém o arquivo; x3 = a pasta de destino; x4 = a pasta de backup
alias 'x1'="unzip 'x2' -d 'x3' && mv 'x2' 'x4'" 

Ou seja:
alias .jpgz="unzip $HOME/Download/'*.zip' -d $HOME/Arquivos/jpg && mv $HOME/Download/*.zip $HOME/.backup/" 

A idéia era fazer algo perto do que o xerxes fez, assim como o Mauricio sugeriu, mas eu quero adicionar um comando para executar o shell como o alias faz. Então, basicamente é, como criar uma lista com extensões dos arquivos, uma lista com os diretórios e uma lista de comandos para ativá-los. O shell script será adicionado no '.zshrc', assim como fiz com o alias:

source $HOME/.sh/alias 

Nota: desculpa a demora para responder, estou lendo e absorvendo o bash, tal como fazendo pesquisas sobre como fazê-lo.

Mauriciodez, obrigado pela dica. Baseado no seu comando e do xerxes, e algumas dicas que achei na net, para 1 arquivo só é bom. Mas é um pouco longe do pretendido, que é também adicionar os diretórios ($HOME/Download e $HOME/pasta/de/destino) em uma lista de variavéis, assim como o comando para ativa-lo. Alguma dica de como fazê-lo?

#!/bin/bash
for file in *.zip; do
unzip "${file}" -d "$HOME/Arquivos/jpg" && mv ${file} $HOME/.backup/
done

Obrigado à todos e abraço.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts