[BASH] Ayuda con un shell script

Temas sobre programación ( php, c, sql, html, perl, python, ruby, java, bash, etc ) y recursos ( herramientas, frameworks, hosting, cms, etc )

Moderadores: akodo, maiku

Responder
Avatar de Usuario
Rodri_521
Forista Nuevo
Forista Nuevo
Mensajes: 5
Registrado: Vie Jul 10, 2009 7:00 am

[BASH] Ayuda con un shell script

Mensaje por Rodri_521 » Vie Jul 10, 2009 11:02 am

Hola a todos... :D
Bueno les cuento que estoy haciendo un script para usar mi DropBox con mas comodidad...
La cosa viene asi, necesito que copie un archivo a algunas de las 3 carpetas que quiero, despues que me muestre que lo copio, y me gustaria que me de el link que necesito con DropBox...
Asi es mi code ahora:

Código: Seleccionar todo

#!/bin/sh

# Dialog box to choose thumb's size
UBIC=`zenity --list --title="Elegir la Ubicacion del archivo..." --radiolist --column="·" --column="Ubicaciones" "" "Dropbox" "" "Dropbox/Photos" "" "Dropbox/Public"`

if [ "${SIZE}" == "" ]; then    
zenity --error --text="La ubicacion no fue definida por $USERNAME.
Por favor, seleccione la ubicacion para copiar. "
exit 1
fi
Destino=/home/$USERNAME/$UBIC
cp $1 $Destino

zenity --info --text="El archivo $1 ha sido copiado a /home/$USERNAME/$UBIC."

nautilus /home/$USERNAME/$UBIC
Si yo ejecuto dropbox puburl /home/username/Pantallazo.png desde la terminal, me da el link:

Código: Seleccionar todo

http://files.getdropbox.com/u/1249210/Pantallazo.png
Y si ejecuto:

Código: Seleccionar todo

usr@mach:~$ cd ./DropBox/Public
usr@mach:~/DropBox/Public$ dropbox filestatus
Me da el resultado de todos los archivos de la carpeta y el estado:

Código: Seleccionar todo

Pant.png     up to date
Pant2.png     up to date
Pant3.png     syncing
Bueno, resulta que quiero hacer, que una vez que termine de subirse (es decir que cambie el estado de syncing a up to date) me de el link.
Osea el script tendria que obtener el nombre del archivo, ubicarlo en esa tabla de estado, y cuando vea que esta en up to date, ejecutar el comando que da como resultado el link, ademas me gustaria q se copie en el porta papeles como lo hace desde el menu contextual...

Otro problema que tengo con ese script, es que no me copia todos los archivos, solo archivos chicos como imagenes... :?

Espero puedan ayudarme, Gracias de antemano! :wink:
Avatar de Usuario
akodo
Moderador
Moderador
Mensajes: 1457
Registrado: Mié Nov 28, 2007 8:00 am
Ubicación: En la X del explorer (pulse para llamar)

Re: [BASH] Ayuda con un shell script

Mensaje por akodo » Vie Jul 10, 2009 11:47 am

¿Has mirado en las opciones del dropbox en busca de algo útil? Eso de que cambie de estado, sin que te lo proporcione dropbox de alguna forma, es complicado.

Lo único que se me ocurre es obtener el estado periódicamente, y comprobar que el estado del fichero en cuestión sea "up to date", para después ejecutar el comando.

Para el portapapeles, parace que el comando a utilizar es el "Xsel". Aquí te dejo la información:
http://linuxtidbits.wordpress.com/2008/ ... clipboard/
Descargue el gestor de mp3 "Music Manager" -> ([url=http://ctrlalt.iespana.es]mmlf[/url])
Última versión del gestor "Music Manager" -> ([url=http://sourceforge.net/projects/jmusicmanager/]jmmm[/url])
Avatar de Usuario
Rodri_521
Forista Nuevo
Forista Nuevo
Mensajes: 5
Registrado: Vie Jul 10, 2009 7:00 am

Re: [BASH] Ayuda con un shell script

Mensaje por Rodri_521 » Vie Jul 10, 2009 10:43 pm

akodo, si eso es lo que quiero, que al copair el archivo de la variable $1 a /home/user/Dropbox haga un
$ cd /home/user/Dropbox
$ dropbox filestatus
y ubicar en la lista que da como resultado de salida, la linea que contenga el nombre del archivo copiado (debe haber una forma de extraccion del nombre de la variable $1 [$1:~name] o algo asi parecido) y ver el resultado que da dropbox, si el resultado es up to date, que haga:
$ dropbox puburl /home/user/Dropbox/$1:~name
Es decir que osea la direccion de la carpeta de dropbox y el nombre del archivo que tomamos en $1.. y guardar en el portapales el resultado que seria un link a internet...
Despues le pondria un cartelito que avise, pero eso seria facil con zenity...
Soy muy novato con el tema del bash, en cambio con el BATCH soy bastante mas experimentado, hace pocos meses que uso GNU/Linux Ubuntu 9.04.

Gracias por sus respuestas, en especial avos akodo! :wink:

Salu2! :D
Avatar de Usuario
akodo
Moderador
Moderador
Mensajes: 1457
Registrado: Mié Nov 28, 2007 8:00 am
Ubicación: En la X del explorer (pulse para llamar)

Re: [BASH] Ayuda con un shell script

Mensaje por akodo » Sab Jul 11, 2009 1:25 pm

Suponiendo que tienes el nombre del fichero en cuestión en la variable "$f" puedes intentar lo siguiente:

Código: Seleccionar todo

estado=`dropbox filestatus | grep $f | sed -r {s/$f[[:blank:]]+//g}`
Con eso deberías tener el estado del fichero en la variable estado
Descargue el gestor de mp3 "Music Manager" -> ([url=http://ctrlalt.iespana.es]mmlf[/url])
Última versión del gestor "Music Manager" -> ([url=http://sourceforge.net/projects/jmusicmanager/]jmmm[/url])
Avatar de Usuario
Rodri_521
Forista Nuevo
Forista Nuevo
Mensajes: 5
Registrado: Vie Jul 10, 2009 7:00 am

Re: [BASH] Ayuda con un shell script

Mensaje por Rodri_521 » Dom Jul 12, 2009 11:09 am

akodo, lo probe en consola, pero me daria una cosa asi:

Código: Seleccionar todo

estado=Drop:               up to date
Suponiendo que Drop es la variable $f...

Bueno, eso es lo que queria en parte, pero como obtengo de toda la direccion del archivo $1 solo el nombre? Y como para extraer de la linea qe da como resultado el comando que me pasaste antes que tiene una estrucutura asi:

Código: Seleccionar todo

[Archivo][           ][Estado]
Como extraigo solo el resultado, para compararlo y si es correcto (up to date) ejecute:

Código: Seleccionar todo

dropbox puburl $f
y ese resultado lo mande al Portapapeles...?


Gracias! :wink:
Avatar de Usuario
Rodri_521
Forista Nuevo
Forista Nuevo
Mensajes: 5
Registrado: Vie Jul 10, 2009 7:00 am

Re: [BASH] Ayuda con un shell script

Mensaje por Rodri_521 » Dom Jul 12, 2009 11:48 am

Con respecto a la extraccion del nombre estuve probando algo asi:

Código: Seleccionar todo

here=$1
count=`expr  ${#PWD} + 1`
countf=${here:$count}
echo $countf
Que anduviera bien si $1 fuera un directorio, porq lo que hace es asignar el archivo tomado ($1) a here. Despues cuenta cuantos caracteres tiene la ubicacion actual del script (/home/user =10) y le sumo 1 por la barra (/home/user/nombrearchivo)
despues extrae de la variable que muestra el archivo, la ubicacion actual y la barra, quedando el nombre solo...
/home/user/nombrearchivo...

Pero al ser $1 o here, un archivo, tira error... tendria que hacer que el scirpt se ubique en donde esta el archivo..

$ cd $1:Ubic
$ Codigo de arriba

Pero no logro hacerlo... :?

Salu2! :D
Avatar de Usuario
akodo
Moderador
Moderador
Mensajes: 1457
Registrado: Mié Nov 28, 2007 8:00 am
Ubicación: En la X del explorer (pulse para llamar)

Re: [BASH] Ayuda con un shell script

Mensaje por akodo » Dom Jul 12, 2009 7:42 pm

Para extraer los nombres de los ficheros de una ruta tienes los comandos "basename" y "dirname", para extraer el nombre del fichero y el directorio respectivamente.

Para lo del dropbox, empieza haciendo unas pruebas:
· dropbox filestatus | grep $f
Debería dejarte únicamente la línea del filestatus que tiene el nombre del fichero (contenido en la variable $f). Si deja algo más, entonces vamos por mal camino.
Descargue el gestor de mp3 "Music Manager" -> ([url=http://ctrlalt.iespana.es]mmlf[/url])
Última versión del gestor "Music Manager" -> ([url=http://sourceforge.net/projects/jmusicmanager/]jmmm[/url])
Avatar de Usuario
Rodri_521
Forista Nuevo
Forista Nuevo
Mensajes: 5
Registrado: Vie Jul 10, 2009 7:00 am

Re: [BASH] Ayuda con un shell script

Mensaje por Rodri_521 » Mié Jul 15, 2009 8:41 am

Gracias por los datos... Miren asi va mi codigo...

Código: Seleccionar todo

#!/bin/sh

UBIC=`zenity --list --title="Elegir la Ubicacion del archivo..." --radiolist --column="·" --column="Ubicaciones" "" "Dropbox" "" "Dropbox/Photos" "" "Dropbox/Public"`


if [ "${UBIC}" == "" ]; then    
zenity --error --text="La ubicacion no fue definida por $USERNAME.
Por favor, seleccione la ubicacion para copiar. "
exit 1
fi

Destino=/home/$USERNAME/$UBIC
name=`basename $1`
cp $1 $Destino

zenity --info --text="El archivo $1 ha sido copiado a /home/$USERNAME/$UBIC."


if [ "${Destino}" == "/home/$USERNAME/Dropbox/Public" ]; then

cd /home/$USERNAME/Dropbox/Public
estado=`dropbox filestatus | grep $name | sed -r {s/$f[[:blank:]]+//g}`
xmessage "$estado"
exit

else

exit

fi
Bueno, logre hacer una variable con el nombre, porq si filtra con grep todo el path, no funciona solo grep nombre.extension
La cuestion es que cuando ejecuto el comando (dropbox filestatus | grep $name | sed -r {s/$f[[:blank:]]+//g}) solo en la temrinal me da un resultado asi:

Código: Seleccionar todo

archivo.ext:uptodate
Osea todo junto, y nose como compararlo solo con el estado de subida.
Pero al usarlo en el script de gnome, termina en el cartel de que lo copio! sin otro comando... :?
Y cuando ejecuto el script en consola me salen estas lineas...

Código: Seleccionar todo

Gtk-Message: (for origin information, set GTK_DEBUG): failed to retrieve property `GtkTreeView::odd-row-color' of type `GdkColor' from rc file value "((GString*) 0x8658780)" of type `GString'
[: 10: Dropbox/Public: unexpected operator
[: 27: /home/rodri/Dropbox/Public: unexpected operator
Pero lo que me faltaria es que vea el estado, hasta que cambie de syncing a up to date, y al pasar esto haga un

Código: Seleccionar todo

dropbox getpub $namearchivo
y me tire un mensaje en zenity con el link de descarga.. (q es el resultado del comando anterior)

Eso es... Gracias Akodo! :D
Avatar de Usuario
akodo
Moderador
Moderador
Mensajes: 1457
Registrado: Mié Nov 28, 2007 8:00 am
Ubicación: En la X del explorer (pulse para llamar)

Re: [BASH] Ayuda con un shell script

Mensaje por akodo » Mié Jul 15, 2009 6:00 pm

En la parte del script donde usas el sed, pones $f cuando debería ser $name.
Además, parece que lo que te deja el filestatus es:

Código: Seleccionar todo

fichero:      up to date
y no

Código: Seleccionar todo

fichero     up to date
Los ":" son importantes.

Siendo así, el sed hay que cambiarlo por

Código: Seleccionar todo

sed -r {s/$name:[[:blank:]]+//g}
Descargue el gestor de mp3 "Music Manager" -> ([url=http://ctrlalt.iespana.es]mmlf[/url])
Última versión del gestor "Music Manager" -> ([url=http://sourceforge.net/projects/jmusicmanager/]jmmm[/url])
Responder
  • Similar Topics
    Respuestas
    Vistas
    Último mensaje