E se... [RESOLVIDO]

1. E se... [RESOLVIDO]

Lucas Moraes
lucasdemoraesc

(usa Ubuntu)

Enviado em 08/08/2017 - 22:20h

Olá. Estou começando a aprender Shell Scripts agora, queria saber se tem algum comando para usar como complemento do IF e FI, que peça para verificar o formato do arquivo.
Para eu poder fazer algo tipo...
Se for .jpg mover para imagens
Se for .mp3 mover para músicas.

#!/bin/bash
echo teste iniciado
If [ = .jpg]
then
mv /home/eu/teste.jpg /home/eu/imagens
else
echo qualquer coisa
exit
fi


É só uma curiosidade mesmo.


LMC


  


2. Re: E se...

Perfil removido
removido

(usa Nenhuma)

Enviado em 08/08/2017 - 22:28h

Use o file para isso.
$ file Imagens/20.jpg 
Imagens/20.jpg: JPEG image data, JFIF standard 1.01, resolution (DPI), density 2
ion 8, 1177x794, frames 3
$ file Imagens/20.jpg | grep JPEG || printf "Não existe nenhum arquivo JPEG aqui. \n"

Adapte aí.


3. Re: E se... [RESOLVIDO]

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 08/08/2017 - 22:30h

vc pode usar fazer um cut sobre o nome do arquivo pegando o conteúdo após o ".", ou usar um comando que valide o tipo do arquivo, que considero mais seguro, um desses comandos é o file


if file matrix-1.jpg | grep image; then
echo "move para o diretório de imagens"
fi




4. E se...

Lucas Moraes
lucasdemoraesc

(usa Ubuntu)

Enviado em 08/08/2017 - 23:05h

Obrigado! não sabia do file aí.

Mas na verdade a minha intenção na verdade é verificar a pasta toda, daí encontrar todos os arquivos com determinada extensão, e executar determinado comando sobre eles.

Não sei se isso é possivel. Não encontrei quase nada sobre.
Mas mesmo assim quero ter certeza.


LMC


5. Re: E se... [RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 08/08/2017 - 23:05h

correalinux escreveu:

Olá. Estou começando a aprender Shell Scripts agora, queria saber se tem algum comando para usar como complemento do IF e FI, que peça para verificar o formato do arquivo.
Para eu poder fazer algo tipo...
Se for .jpg mover para imagens
Se for .mp3 mover para músicas.


acho que vc está se referindo ao 'elif'

da uma olhada >>> https://www.tutorialspoint.com/unix/if-elif-statement.htm

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

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

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



6. Re: E se...

Ryuk Shinigami
Ryuk

(usa Nenhuma)

Enviado em 09/08/2017 - 10:06h

Apenas uma sugestão (pode ser melhorado!):
#!/bin/bash

dir=/tmp/Testes

find $dir -maxdepth 1 -type f | while read arq
do
typeset -l ext
ext=`echo $arq | rev | cut -d. -f1 | rev`
case $ext in
txt|pdf) echo "mover $arq para Documentos"; dest=Documentos ; mv $arq $dir/$dest ;;
jpg|png) echo "mover $arq para Imagens"; dest=Imagens ; mv $arq $dir/$dest ;;
mp3) echo "mover $arq para Músicas"; dest=Músicas ; mv $arq $dir/$dest ;;
avi) echo "mover $arq para Vídeos"; dest=Vídeos ; mv $arq $dir/$dest ;;
*) echo "mover $arq para Outros"; dest=Outros ; mv $arq $dir/$dest ;;
esac
done



7. Re: E se... [RESOLVIDO]

Rodrigo Albuquerque Serafim
raserafim

(usa Slackware)

Enviado em 09/08/2017 - 10:27h

HCK escreveu:

#!/bin/bash

dir=/tmp/Testes

find $dir -maxdepth 1 -type f | while read arq
do
ext=`echo $arq | cut -d. -f2`
case $ext in
txt|pdf) echo "mover para Documentos"; dest=Documentos ; mv $arq $dir/$dest ;;
jpg|png) echo "mover para Imagens"; dest=Imagens ; mv $arq $dir/$dest ;;
mp3) echo "mover para Músicas"; dest=Músicas ; mv $arq $dir/$dest ;;
avi) echo "mover para Vídeos"; dest=Vídeos ; mv $arq $dir/$dest ;;
*) echo "mover para Outros"; dest=Outros ; mv $arq $dir/$dest ;;
esac
done
Código muito limpo! parabens!

uma sugestão só...

recentemente também precisei verificar a extensão para tomar decisão. inicialmente utilizei o mesmo comando sugerido pelo colega HCK:
ext=`echo $arq | cut -d. -f2` 

mas depois percebi um inconveniente nesse código: se o nome do arquivo contiver mais de um ponto ("."), o resultado dá errado (vai retornar todo o conteúdo após o primeiro ponto ("."), e não apenas a extensão).

resolvi com o seguinte comando (é muito provável que existam melhores...):
  typeset -l ext				#convertendo tudo para minúsculo (-l) (-u para maiúsculo)
ext=$(echo $f | rev | cut -c 1-3 | rev) #pegando apenas a extensão (os últimos 3 caracteres)

no processo de verificação da extensão é importante lembrar que é necessário converter o nome do arquivo todo para minúsculo para depois comparar com a string de extensão. se não fizer isso, por exemplo, um arquivo que esteja nomeado em maiúsculo não coincidirá com a string da extensão.



8. Re: E se... [RESOLVIDO]

Rodrigo Albuquerque Serafim
raserafim

(usa Slackware)

Enviado em 09/08/2017 - 10:30h

complementando a minha última resposta...

esse tópico deve ajudar (uma dúvida minha semelhante à sua):


9. E se...

Lucas Moraes
lucasdemoraesc

(usa Ubuntu)

Enviado em 09/08/2017 - 20:15h

Muito obrigado galera :)

Este script aí funciona perfeitamente. (Apesar de que além dos comandos case, find...
enfim, não entendi bem a estrutura dos comandos bem como suas funções.

Mas pretendo ainda aprender sobre isso logo!


LMC






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts