Autor Tópico: como usar o zenit para listar determinados arquivos  (Lida 8103 vezes)

Offline geleka

  • Usuário Ubuntu
  • *
  • Mensagens: 60
    • Ver perfil
como usar o zenit para listar determinados arquivos
« Online: 09 de Maio de 2009, 18:57 »
estou criando um script que permite extrair audio dos flash do youtube, que ja foi postado porem voltei a desenvolvelo tentando torna-lo  mais visual estou fazendo o uso do zenity

obs1: TODOS (do youtube pelo menos) os flashs que o firefox grava em cache fica em /tmp/

meu script compia todos os flash do tmp para uma pasta para ntão abrir uma janela padrão para escolher o arquivo


eu queria  uma forma do de criar atalho para a pasta e o usar a janela de escolha (radio) do zenity


segue o atual script


Código: [Selecionar]
#! /bin/bash
cp /tmp/Flash* /home/rafael/.flash
arquivo=$(cd  /home/rafael/.flash ; zenity --file-selection --title="escolha o arquivo a ser convertido") ; echo $arquivo
nome=$(zenity --title="diga o nome da musica" --entry --text="escolha o nome sem espaço")  ; echo $nome
cd /tmp/
ffmpeg -i $arquivo* -acodec libmp3lame -ab 160k -ac 2 -ar 44100   $nome.mp3   
mv $nome.mp3 /home/rafael
cd /home/rafael/
done





 

 
esse jogo eh soda!!!!\\/\\/\\/\\/\\/\\/\\/

Editado pela moderação

Offline clcampos

  • Administrador
  • Usuário Ubuntu
  • *****
  • Mensagens: 10.790
  • .:: User Linux #439596 ::.
    • Ver perfil
Re: como usar o zenit para listar determinados arquivos
« Resposta #1 Online: 19 de Maio de 2009, 17:13 »
Caro geleka eu gosto demais de mexer com shell script, e normalmente fico atento a tópicos que tratam do tema, porém estou com o seu aberto desde o dia que criou, porém sem saber como ajudar.

Falo isto porque leio e releio e não entendo o que deseja, então fiquei aguardando alguém respondê-lo (tem outros doidos aqui que gostam de shell script tanto quanto eu), mas parece que nada.

Então explica novamente o que você procura.

[]'s

Cristiano
Cristiano/Timóteo - MG
.: Como Fazer Perguntas de Forma Inteligente :.                
Com dúvida? pesquise!

alarcon

  • Visitante
Re: como usar o zenit para listar determinados arquivos
« Resposta #2 Online: 19 de Maio de 2009, 17:18 »
Caro geleka eu gosto demais de mexer com shell script, e normalmente fico atento a tópicos que tratam do tema, porém estou com o seu aberto desde o dia que criou, porém sem saber como ajudar.

Falo isto porque leio e releio e não entendo o que deseja, então fiquei aguardando alguém respondê-lo (tem outros doidos aqui que gostam de shell script tanto quanto eu), mas parece que nada.

Então explica novamente o que você procura.

[]'s

Cristiano

kkkkkkkkkk

Então não foi só eu que não entendeu o propósito do colega.
 

Também estava esperando um tal de clcampos :D e outros responderem aqui para eu finalmente entender e copiar o código. :P

alarcon

  • Visitante
Re: como usar o zenit para listar determinados arquivos
« Resposta #3 Online: 19 de Maio de 2009, 17:28 »
Acho que agora entendi + ou -

Você quer é ao executar o script ele abra uma janela com botões tipo radio com todas as opções de arquivos flash existentes na pasta pré-configurada, para vc selecionar qual extrair o audio.

É isso?

Offline clcampos

  • Administrador
  • Usuário Ubuntu
  • *****
  • Mensagens: 10.790
  • .:: User Linux #439596 ::.
    • Ver perfil
Re: como usar o zenit para listar determinados arquivos
« Resposta #4 Online: 27 de Maio de 2009, 12:00 »
alarcon segue o script que prometi na nossa conversa de ontem (acabei ficando apertado e só consegui fazer hoje).

Tentei deixá-lo o mais didático possível (não pensando em você, e sim em algum novato que queira brincar com ele), então além de ter muitos comentários, ele também tem pergunta e mensagem para tudo, assim acho que fica mais fácil entender:

Citar
#!/bin/bash
#
# Rotina para cópia de arquivos seguindo um padrão.
#
# São definidos parametros default para funcionamento:
#           - diretório de origem,
#           - diretório de destino,
#           - padrão de nome do arquivo para verificar na origem
#           - Se os botões de escolha serão radio ou check
# Apesar desses parametors default o usuário pode definir novos na linha de comando
#
# Cristiano
# 27/Mai/2009
#

# Parametros para rodar o script
######################################
# ---------- Diretório de origem: ----------
  # Diretório de onde serão selecionados os arquivos
dirOrigem=${1:-"/tmp"}  # Diretório para baixar (default: /tmp)

# ----------Diretório de destino ----------
  # Em qual diretório os arquivos serão salvos
dirDest=${2:-"$HOME/Área de Trabalho"}

# ---------- Padrão de arquivos ----------
  # Padrão do nome dos arquivos a selecionar
padraoArq=${3:-"Flash"}

# ---------- Formato de apresentação de arquivos ----------
  # 1: para checklist  (padrão)
  # 2: para radiolist
apresenta=${4:-"1"}

# Verificando os Parâmetros
####################################
# ---------- Diretório de origem: ----------
test ! -d "$dirOrigem" && zenity --title="Copia arquivos" --text="Diretório $dirOrigem não existe!" --error && exit 999

# ---------- Diretório de destino: ----------
test ! -d "$dirDest" && zenity --title="Copia arquivos" --text="Diretório $dirDest não existe!" --error && exit 999

# ---------- Padrão de arquivos ----------
test ! "`ls "$dirOrigem"/$padraoArq* 2> /dev/null`" && zenity --title="Copia arquivos" --text="Não existe nenhum arquivo com padrão $padraoArq em $dirOrigem" --error && exit 999

# ---------- Formato de apresentação de arquivos ----------
test "$apresenta" != "1" -a "$apresenta" != "2" && zenity --title="Copia arquivos" --text="Forma de apresentação incorreta." --error && exit 999

# Apresentar arquivos para cópia
######################################
comandoZ=""
for itens in `ls "$dirOrigem"/$padraoArq*`;do
    comandoZ="$comandoZ FALSE $itens"
done

if test "$apresenta" = "1";then    #checklist   (escolha de vários arquivos)
   arqCopiar=$( zenity --text="Escolha os arquivos a copiar" --list --checklist --column=Opção --column=Arquivo $comandoZ )

   test $? -ne 0 && zenity --title="Copia arquivos" --text="Clicou botão cancelar" --error && exit 999
else                               #radiolist   (escolha de apenas um arquivo)
   arqCopiar=$( zenity --text="Escolha o arquivo a copiar" --list --radiolist --column=Opção --column=Arquivo $comandoZ )

   test $? -ne 0 && zenity --title="Copia arquivos" --text="Clicou botão cancelar" --error && exit 999
fi

# Copia arquivos para destino, verificando se já existem
############################################################

IFSold=$IFS
export IFS="|"

for arqCopy in $arqCopiar;do
    if test -e "$dirDest"/`basename $arqCopy`;then
       zenity --title="Copia arquivos" --question --text="Arquivo `basename $arqCopy` já existe em $dirDest. Sobrepõe?"

       test $? -ne 0 && zenity --title="Copia arquivos" --text="Arquivo `basename $arqCopy` não copiado" --info && continue
    fi

    cp "$arqCopy"  "$dirDest"  | zenity --progress --pulsate --auto-close --title="Copia arquivos" --text="Copiando `basename $arqCopy`"

    test $? -eq 0 && zenity --title="Copia arquivos" --text="Arquivo `basename $arqCopy` copiado com sucesso!" --info
done

export IFS=$IFSold

Espero ter capitado a nossa conversa.

[]'s

Cristiano


obs.: A sim, testei ele muito pouco, então verifique antes de usar... hehehe
Cristiano/Timóteo - MG
.: Como Fazer Perguntas de Forma Inteligente :.                
Com dúvida? pesquise!

alarcon

  • Visitante
Re: como usar o zenit para listar determinados arquivos
« Resposta #5 Online: 27 de Maio de 2009, 16:46 »
Caro clcampos, em matéria de shell script/programação (e em outras partes também :D), você é "O CARA", meus parabéns ficou muito bom.

Eu sou um fanfarão, rsrsrs. Sabe uma colcha de retalhos? Sou mais ou menos assim, vou observando scripts e vendo passos interessantes e vou copiando partes deles e colocando em algo que quero criar, tipo um "Frankenstein", mas até que funcionam.  ;D

Percebo que você tem muito bem afiado aí os comandos de shell script, vai demorar um pouquinho para eu assimilar tanta informação, de qualquer maneira, muito obrigado e já está salvo aqui para os meus próximos Frankensteins, kkkkkkkk.
« Última modificação: 27 de Maio de 2009, 16:49 por alarcon »

Offline clcampos

  • Administrador
  • Usuário Ubuntu
  • *****
  • Mensagens: 10.790
  • .:: User Linux #439596 ::.
    • Ver perfil
Re: como usar o zenit para listar determinados arquivos
« Resposta #6 Online: 27 de Maio de 2009, 21:17 »
Caro clcampos, em matéria de shell script/programação (e em outras partes também :D), você é "O CARA", meus parabéns ficou muito bom.

Eu sou um fanfarão, rsrsrs. Sabe uma colcha de retalhos? Sou mais ou menos assim, vou observando scripts e vendo passos interessantes e vou copiando partes deles e colocando em algo que quero criar, tipo um "Frankenstein", mas até que funcionam.  ;D

E quem disse que não copio código daqui, dali.... hehhe... isso é normal meu caro, e você sabe muito bem que se tem alguém que considero "O CARA" esse alguém é você.

Citar
Percebo que você tem muito bem afiado aí os comandos de shell script, vai demorar um pouquinho para eu assimilar tanta informação, de qualquer maneira, muito obrigado e já está salvo aqui para os meus próximos Frankensteins, kkkkkkkk.

Depois você diz se ele funcionou certinho, e se tem algo que faria diferente. É sempre bom receber criticas construtivas.

[]´s

Cristiano
Cristiano/Timóteo - MG
.: Como Fazer Perguntas de Forma Inteligente :.                
Com dúvida? pesquise!

alarcon

  • Visitante
Re: como usar o zenit para listar determinados arquivos
« Resposta #7 Online: 28 de Maio de 2009, 10:24 »
Caro clcampos, em matéria de shell script/programação (e em outras partes também :D), você é "O CARA", meus parabéns ficou muito bom.

Eu sou um fanfarão, rsrsrs. Sabe uma colcha de retalhos? Sou mais ou menos assim, vou observando scripts e vendo passos interessantes e vou copiando partes deles e colocando em algo que quero criar, tipo um "Frankenstein", mas até que funcionam.  ;D

E quem disse que não copio código daqui, dali.... hehhe... isso é normal meu caro, e você sabe muito bem que se tem alguém que considero "O CARA" esse alguém é você.

Citar
Percebo que você tem muito bem afiado aí os comandos de shell script, vai demorar um pouquinho para eu assimilar tanta informação, de qualquer maneira, muito obrigado e já está salvo aqui para os meus próximos Frankensteins, kkkkkkkk.

Depois você diz se ele funcionou certinho, e se tem algo que faria diferente. É sempre bom receber criticas construtivas.

[]´s

Cristiano

Funcionou direitinho, só tive que alterar de "Área de Trabalho" para "Desktop" por que aqui é assim que se chama a área de trabalho no meu Ubuntu 9.04 e também tive que alterar a linha:

for itens in `ls "$dirOrigem"/$padraoArq*`;do

para:

for itens in `ls "$dirOrigem"/$padraoArq* | cut -d/ -f3-`;do

por que na lista de opções dos flashs estava aparecento com o caminho inteiro, por exemplo:

/tmp/Flashxxxxx
/tmp/Flashyyyyy


Já com a modificação que fiz agora a lista aparece assim:

Flashxxxxx
Flashyyyyy


Só questão de estética, mas está muito bom o seu trabalho. Sempre quis entender com se faz uma janela com zenity em radiolist ou checklist com opções que o script ainda vai buscar e portanto de valores inicialmente indeterminados.

Engraçado que quando rodei pela primeira vez seu script não tinha notado isso, pois me pareceu que não tinha esse /tmp na frente dos nomes dos arquivos Flash. Com você aparece antes do nome dos arquivos o /tmp, ous seja, ele mostra o caminho completo?

Tem como colocar um dos itens já marcado na janela em radiolist?

Ah, ainda estou analisando seu belo trabalho aqui. Tem vários passos que nunca tinha visto em scripts, ao menos da forma com que você utilizou.
« Última modificação: 28 de Maio de 2009, 10:27 por alarcon »

Offline clcampos

  • Administrador
  • Usuário Ubuntu
  • *****
  • Mensagens: 10.790
  • .:: User Linux #439596 ::.
    • Ver perfil
Re: como usar o zenit para listar determinados arquivos
« Resposta #8 Online: 28 de Maio de 2009, 11:06 »
Vamos por partes:

Funcionou direitinho, só tive que alterar de "Área de Trabalho" para "Desktop" por que aqui é assim que se chama a área de trabalho no meu Ubuntu 9.04 e também tive que alterar a linha:

A alteração foi tranquila né?!?! Pergunto porque que o diretório esta em uma variável no inicio.

Citar
for itens in `ls "$dirOrigem"/$padraoArq*`;do

para:

for itens in `ls "$dirOrigem"/$padraoArq* | cut -d/ -f3-`;do

/tmp/Flashxxxxx
/tmp/Flashyyyyy


por que na lista de opções dos flashs estava aparecento com o caminho inteiro, por exemplo:
Já com a modificação que fiz agora a lista aparece assim:

Flashxxxxx
Flashyyyyy

O ideal não é usar cut ai, pois ele só esta servindo porque o diretório é o /tmp, e se fosse algo com um nome maior (ex.: /home/alarcon) não daria certo. Quando fiz o script deixei aparecendo o caminho completo de propósito, mas como prefere só o nome você pode deixar aquela linha exatamente como estava e fazer uma alteração (que servirá para qualquer diretório) na próxima linha, que ficaria assim:

Citar
for itens in `ls "$dirOrigem"/$padraoArq*`;do
    comandoZ="$comandoZ FALSE `basename $itens`"
done

Mas não tenho certeza que esta alteração não causará erros em outros locais mais a frente.

A sim, também não testei isto, só digitei diretamente aqui na mensagem.

Citar
Só questão de estética, mas está muito bom o seu trabalho. Sempre quis entender com se faz uma janela com zenity em radiolist ou checklist com opções que o script ainda vai buscar e portanto de valores inicialmente indeterminados.

Engraçado que quando rodei pela primeira vez seu script não tinha notado isso, pois me pareceu que não tinha esse /tmp na frente dos nomes dos arquivos Flash. Com você aparece antes do nome dos arquivos o /tmp, ous seja, ele mostra o caminho completo?

Isto, eu optei quando fiz para deixar mesmo o caminho completo de cada arquivo.

Citar
Tem como colocar um dos itens já marcado na janela em radiolist?

Tem sim, teria que revisar o script (nada muito complexo) para que o primeiro item apareça um TRUE ao contrário de FALSE. Algo assim (alterando o mesmo código discutido anteriormente):

Citar
primeiraVez="true"

for itens in `ls "$dirOrigem"/$padraoArq*`;do
    if test "$primeiraVez" = "true"; then
       comandoZ="$comandoZ TRUE `basename $itens`"

       primeiraVez="false"
    else

       comandoZ="$comandoZ FALSE `basename $itens`"
    fi
done

Citar
Ah, ainda estou analisando seu belo trabalho aqui. Tem vários passos que nunca tinha visto em scripts, ao menos da forma com que você utilizou.

Por curiosidade, o que viu de diferente?

[]'s

Cristiano
« Última modificação: 28 de Maio de 2009, 11:09 por clcampos »
Cristiano/Timóteo - MG
.: Como Fazer Perguntas de Forma Inteligente :.                
Com dúvida? pesquise!

alarcon

  • Visitante
Re: como usar o zenit para listar determinados arquivos
« Resposta #9 Online: 28 de Maio de 2009, 11:29 »
Quanto ao cut eu tenho consciência sim que depende do caminho, ou seja, o valor -f3- teria de ser outro para caminhos mais longos. Como foi definido um local fixo, no caso o /tmp, deixei assim, mas na generalidade sem dúvida que fica bem melhor.

Quanto a forma diferente de se trabalhar com shell script que eu falei, posso tomar como exemplo a forma de definir variáveis:

dirOrigem=${1:-"/tmp"}

dirDest=${2:-"$HOME/Área de Trabalho"}

padraoArq=${3:-"Flash"}

apresenta=${4:-"1"}


nunca tinha visto uma nomenclatura assim.

Em ralação ao termo Área de trabalho foi tranqüilo sim.

[]s
Alarcon

Offline clcampos

  • Administrador
  • Usuário Ubuntu
  • *****
  • Mensagens: 10.790
  • .:: User Linux #439596 ::.
    • Ver perfil
Re: como usar o zenit para listar determinados arquivos
« Resposta #10 Online: 28 de Maio de 2009, 11:36 »
Quanto ao cut eu tenho consciência sim que depende do caminho, ou seja, o valor -f3- teria de ser outro para caminhos mais longos. Como foi definido um local fixo, no caso o /tmp, deixei assim, mas na generalidade sem dúvida que fica bem melhor.

Quanto a forma diferente de se trabalhar com shell script que eu falei, posso tomar como exemplo a forma de definir variáveis:

dirOrigem=${1:-"/tmp"}

dirDest=${2:-"$HOME/Área de Trabalho"}

padraoArq=${3:-"Flash"}

apresenta=${4:-"1"}


nunca tinha visto uma nomenclatura assim.

Em ralação ao termo Área de trabalho foi tranqüilo sim.

[]s
Alarcon

Estas definições servem para dar valores default as variáveis.

Então se você executa o script simplesmente chamando o nome dele, as variáveis ficarão com os valores default:

Citar
dirOrigem=${1:-"/tmp"}

dirDest=${2:-"$HOME/Área de Trabalho"}

padraoArq=${3:-"Flash"}

apresenta=${4:-"1"}

Porém nada impede você de executar o script para outra situação, por exemplo:

Citar
./nome_script  /home/alarcon  /media/Pen_drive planilha 2

E neste caso as variáveis teriam estes valores, ficando:

Citar
dirOrigem="/home/alarcon"

dirDest="/media/Pen_drive"

padraoArq="planilha"

apresenta="2"

Lembrando que você pode substituir apenas uma, duas ou quantas quiser, apenas definindo na linha de comando quantos parâmetros quiser após o nome do script.

[]'s

Cristiano
Cristiano/Timóteo - MG
.: Como Fazer Perguntas de Forma Inteligente :.                
Com dúvida? pesquise!

alarcon

  • Visitante
Re: como usar o zenit para listar determinados arquivos
« Resposta #11 Online: 28 de Maio de 2009, 16:03 »
Humm, entendi clcampos, isso é bem bacana, pois possibilita entrar com valores para executar o script que não os default, já na execução.

Quero fazer aqui algumas correções, seu script original funciona perfeito aqui só trocando de Área de trabalho para Desktop. Já a edição que fiz colocando o cut não está funcionando se a pasta de origem é /tmp, mas se eu colocar em qualquer outra pasta da minha na home, por exemplo, /home/alarcon/vídeos essa mudança que fiz funciona perfeitamente. Esta última modificação proposta por você para retirar o /tmp do nomes dos arquivos e aquela de a primeira opção já está marcada na janela radiolist também só funciona se a pasta de origem for qualquer uma na sua pasta de usuário na home, já com a pasta /tmp também dá o mesmo erro que com o cut.

Ainda não percebi o que está causando este erro, mas na sua forma original com os arquivos sendo listados assim /tmp/Flashxxxxx o script funciona perfeitamente para dirOrigem=${1:-"/tmp"} já das outras formas não.

Como uma sugestão para melhorar seu script, só tenho uma sobre o caso de janelas com checklist por que se o usuário selecionar mais de uma opção irá aparecer várias janelas para se dar um ok numa janela de sucesso. Acho que aí caberia só uma barra de progresso e um único ok final numa janela de sucesso, evitando assim vários cliques. Só para ficar mais estético e evitar muitos cliques se forem muitos arquivos.

Offline clcampos

  • Administrador
  • Usuário Ubuntu
  • *****
  • Mensagens: 10.790
  • .:: User Linux #439596 ::.
    • Ver perfil
Re: como usar o zenit para listar determinados arquivos
« Resposta #12 Online: 28 de Maio de 2009, 16:43 »
Humm, entendi clcampos, isso é bem bacana, pois possibilita entrar com valores para executar o script que não os default, já na execução.

Quero fazer aqui algumas correções, seu script original funciona perfeito aqui só trocando de Área de trabalho para Desktop. Já a edição que fiz colocando o cut não está funcionando se a pasta de origem é /tmp, mas se eu colocar em qualquer outra pasta da minha na home, por exemplo, /home/alarcon/vídeos essa mudança que fiz funciona perfeitamente. Esta última modificação proposta por você para retirar o /tmp do nomes dos arquivos e aquela de a primeira opção já está marcada na janela radiolist também só funciona se a pasta de origem for qualquer uma na sua pasta de usuário na home, já com a pasta /tmp também dá o mesmo erro que com o cut.

Ainda não percebi o que está causando este erro, mas na sua forma original com os arquivos sendo listados assim /tmp/Flashxxxxx o script funciona perfeitamente para dirOrigem=${1:-"/tmp"} já das outras formas não.

Como eu disse aquela alteração realmente iria dar problema. Abaixo segue o script corrigido para aceitar apenas o nome do arquivo, e não seu $PATH completo. Mais uma vez eu alterei o script diretamente aqui, então o teste fica com você (linha das alterações em negrito, e o local sublinhado):

Citar
#!/bin/bash
#
# Rotina para cópia de arquivos seguindo um padrão.
#
# São definidos parametros default para funcionamento:
#           - diretório de origem,
#           - diretório de destino,
#           - padrão de nome do arquivo para verificar na origem
#           - Se os botões de escolha serão radio ou check
# Apesar desses parametors default o usuário pode definir novos na linha de comando
#
# Cristiano
# 27/Mai/2009
#

# Parametros para rodar o script
######################################
# ---------- Diretório de origem: ----------
  # Diretório de onde serão selecionados os arquivos
dirOrigem=${1:-"/tmp"}  # Diretório para baixar (default: /tmp)

# ----------Diretório de destino ----------
  # Em qual diretório os arquivos serão salvos
dirDest=${2:-"$HOME/Área de Trabalho"}

# ---------- Padrão de arquivos ----------
  # Padrão do nome dos arquivos a selecionar
padraoArq=${3:-"Flash"}

# ---------- Formato de apresentação de arquivos ----------
  # 1: para checklist  (padrão)
  # 2: para radiolist
apresenta=${4:-"1"}

# Verificando os Parâmetros
####################################
# ---------- Diretório de origem: ----------
test ! -d "$dirOrigem" && zenity --title="Copia arquivos" --text="Diretório $dirOrigem não existe!" --error && exit 999

# ---------- Diretório de destino: ----------
test ! -d "$dirDest" && zenity --title="Copia arquivos" --text="Diretório $dirDest não existe!" --error && exit 999

# ---------- Padrão de arquivos ----------
test ! "`ls "$dirOrigem"/$padraoArq* 2> /dev/null`" && zenity --title="Copia arquivos" --text="Não existe nenhum arquivo com padrão $padraoArq em $dirOrigem" --error && exit 999

# ---------- Formato de apresentação de arquivos ----------
test "$apresenta" != "1" -a "$apresenta" != "2" && zenity --title="Copia arquivos" --text="Forma de apresentação incorreta." --error && exit 999

# Apresentar arquivos para cópia
######################################
comandoZ=""
primeiraVez="true"

for itens in `ls "$dirOrigem"/$padraoArq*`;do
     if test "$primeiraVez" = "true"; then
        comandoZ="$comandoZ TRUE `basename $itens`"

        primeiraVez="false"
     else
        comandoZ="$comandoZ FALSE `basename $itens`"
     fi
done

if test "$apresenta" = "1";then    #checklist   (escolha de vários arquivos)
   arqCopiar=$( zenity --text="Escolha os arquivos a copiar" --list --checklist --column=Opção --column=Arquivo $comandoZ )

   test $? -ne 0 && zenity --title="Copia arquivos" --text="Clicou botão cancelar" --error && exit 999
else                               #radiolist   (escolha de apenas um arquivo)
   arqCopiar=$( zenity --text="Escolha o arquivo a copiar" --list --radiolist --column=Opção --column=Arquivo $comandoZ )

   test $? -ne 0 && zenity --title="Copia arquivos" --text="Clicou botão cancelar" --error && exit 999
fi

# Copia arquivos para destino, verificando se já existem
############################################################

IFSold=$IFS
export IFS="|"
copiouCerto="true"
nroCp="0"

for arqCopy in $arqCopiar;do
     nroCp=`expr $nroCp + 1`

    if test -e "$dirDest"/$arqCopy;then
       zenity --title="Copia arquivos" --question --text="Arquivo $arqCopy já existe em $dirDest. Sobrepõe?"

       if test $? -ne 0; then
          zenity --title="Copia arquivos" --text="Arquivo $arqCopy não copiado" --info
          nroCp=`expr $nroCp - 1`
          continue
       fi
    fi

    cp "$dirOrigem"/"$arqCopy"  "$dirDest"  | zenity --progress --pulsate --auto-close --title="Copia arquivos" --text="Copiando $arqCopy"

    test $? -ne 0 && zenity --title="Copia arquivos" --text="Erro na cópia do arquivo $arqCopy !" --error && copiouCerto="false"
done

test "$copiouCerto" = "true" -a $nroCp -ge 1 && zenity --title="Copia arquivos" --text="Cópia realizada com sucesso" --info
test "$copiouCerto" = "false" && zenity --title="Copia arquivos" --text="Rotina apresentou falhas!" --error

export IFS=$IFSold

Citar
Como uma sugestão para melhorar seu script, só tenho uma sobre o caso de janelas com checklist por que se o usuário selecionar mais de uma opção irá aparecer várias janelas para se dar um ok numa janela de sucesso. Acho que aí caberia só uma barra de progresso e um único ok final numa janela de sucesso, evitando assim vários cliques. Só para ficar mais estético e evitar muitos cliques se forem muitos arquivos.

Pois é, isso também fiz de propósito, e só fiz para que a pessoa que não entende muito de shell script veja o passo a passo da execução. Mas eu mudei agora então, e só aparecerá mensagem de erro caso tenha algum problema, e no final ele apresenta uma mensagem caso tudo tenha ocorrido bem.

Quanto a barra de progresso, posso dizer que eu até tomei o cuidado de colocar uma para funcionar na cópia de cada arquivo, porém ela não é apresentada para arquivos pequenos.

Espero que agora esteja melhor, e que as alterações funcionem.

[]'s

Cristiano

Editando:

Acabei fazendo um teste básico, mas foi um teste só.
« Última modificação: 28 de Maio de 2009, 17:06 por clcampos »
Cristiano/Timóteo - MG
.: Como Fazer Perguntas de Forma Inteligente :.                
Com dúvida? pesquise!

alarcon

  • Visitante
Re: como usar o zenit para listar determinados arquivos
« Resposta #13 Online: 28 de Maio de 2009, 17:41 »
Primeiramente, muito agradecido pelas respostas. Quero deixar claro que não tenho nenhum uso especial para esse script no momento e ele nem foi pedido por mim, mas é que vi no mesmo uma dúvida antiga que tinha e que poderia ser resolvida aqui pelos nobres colegas sabedores de shell script como você clcampos.

A parte que tinha dúvida para mim já foi respondida e aparentemente foi até mais fácil do que eu imagina, mas ainda vou entender melhor a mágica precisamente usada aqui:

Citar
comandoZ=""
for itens in `ls "$dirOrigem"/$padraoArq*`;do
    comandoZ="$comandoZ FALSE $itens"
done

que seria o ponto que responde a minha dúvida sobre se criar janelas com radiolist com valores ainda para serem estabelecidos pelo script.

Vou salvar esta nova forma do script e testar depois com calma, entretanto ressalto mais uma vez seu belo trabalho.

Qualquer dúvida a mais que tenha sobre shell script e o que foi postado aqui, entrarei em contato de forma particular, mas valeu pela aula que me foi dada neste tópico.

Ah, o script tá crescendo em tamanho hein. ;D

Veja onde uma simples dúvida pode nos levar. :P


===EDITADO===

Depois do meu último post até já tinha visto que vc usou barra de progresso sim e percebi que num arquivo pequeno é imperceptível, mas num teste que fiz aqui tinha um arquivo grande de um vídeo que fiz com o wink que deu para ver a barra de progresso.

« Última modificação: 28 de Maio de 2009, 17:46 por alarcon »

Offline clcampos

  • Administrador
  • Usuário Ubuntu
  • *****
  • Mensagens: 10.790
  • .:: User Linux #439596 ::.
    • Ver perfil
Re: como usar o zenit para listar determinados arquivos
« Resposta #14 Online: 28 de Maio de 2009, 17:53 »
Alarcon eu me divirto muito com shell scripts (hehehe... acho que nem precisa mais de teste de nerd né... :P), então foi ótimo brincar com ele.

To sempre as ordens para tirar suas dúvidas, e se quer entender melhor o funcionamento do shell execute ele assim:

Citar
$ bash -x nome_do_script 2> /caminho/nome_do_arquivo

Assim o arquivo "/caminho/nome_do_arquivo" terá a execução do script linha a linha já com as variáveis substituidas pelo seus valores. Assim você entende como a lista foi composta em tempo de execução.

[]'s

Cristiano
Cristiano/Timóteo - MG
.: Como Fazer Perguntas de Forma Inteligente :.                
Com dúvida? pesquise!