Ir al contenido
Nible

Script para compartir directorios

Recommended Posts

A continuación os dejo un script para compartir directorios que escribí hace poco, con el propósito de enviar libros electrónicos a un Ereader cuyo puerto USB parecía servir solamente para cargar la batería y no para transferir libros directamente desde el ordenador.

Este script fue pensado para que lo utilizasen mis familiares, osea gente que no poseen muchos conocimientos de informática.
Por eso esta hecho a modo de asistente grafico, usando zenity se hacen preguntas y se explica brevemente lo que va a pasar a continuación, finalmente se usa python3 (presente prácticamente en todas las distros) para crear un servidor sencillo con el directorio deseado.
 

#!/bin/bash

zenity --title='Servir Carpeta' --width=250 --question --ok-label='Si' --cancel-label='No' --text='Servidor de carpeta por WiFi\n\nCon este asistente podrás compartir una carpeta para que cualquier dispositivo con WiFi pueda acceder a ella.\n\n¿Deseas continuar?'

if [ $? -eq 0 ]
then
	zenity --title='Servir Carpeta' --width=250 --info --text="A continuación deberás seleccionar un archivo cualquiera de la carpeta que quieres compartir.\n\nPulsa para continuar" --no-wrap
	narchivo=$(zenity --title='Servir Carpeta' --file-selection)
else
	exit 1
fi

if [ $? -eq 0 ]
then
	npuerto=$(zenity --title='Servir Carpeta' --entry --text='Si quieres puedes especificar un puerto mayor de 1024.\n\nSi no especificas ninguno se usará el 8000.')
fi

if  [ "$npuerto" = "" ] || [ "$npuerto" -lt 1024 ] || [ "$npuerto" -gt 10000 ]
then
	npuerto=8000
fi

#nruta=$(echo $narchivo | sed 's/[a-zA-Z0-9 ]*\.*[a-zA-Z0-9]*$//')
#nruta=$(echo $narchivo | sed 's/[^\/]*[a-zA-Z0-9]*$//')
nruta=$(echo $narchivo | sed 's/[^\/]*$//')
ndireccion=$(ifconfig | grep -o -m 1 -E "192.168.0.1[0-9]{1,2}")

cd $nruta
python3 -m http.server $npuerto &
npid=$!

zenity --title='Servir Carpeta' --width=250 --info --text="Has compartido el directorio: $nruta\n\nPuedes acceder a el con cualquier dispositivo conectado a tu red WiFi usando la siguiente dirección:\nhttp://$ndireccion:$npuerto\n\nATENCIÓN: Cuando cierres este dialogo se dejará de compartir, así que mantenlo abierto mientras quieras que tu carpeta sea accesible." --no-wrap

echo
echo Ruta $nruta
echo IP $ndireccion
echo Puerto $npuerto
echo PID $npid

kill $npid

El script es bastante mejorable, sobretodo la parte que extrae la IP del comando ifconfig y se filtra con grep, ya que solamente está pensado para IPs que acaben seguro con tres números como "192.168.0.150".

A mi personalmente me sirvió para salir del paso, de todos modos cualquier corrección o mejora que queráis aportar serán bienvenidos.

 

Un saludo.

Compartir este post


Enlace al post
Compartir en otros sitios

Muy curioso, me lo apunto por si me hace falta algo así en el futuro.

 

P.D:He estado intentando hacer una versión para terminal pero no me sale y no veo donde anda el fallo, quizás puedas echarle un ojo @Nible

 

PD2: Encontré el error, ifconfig ya no viene instalado por defecto en Debian, el procedimiento adecuado por defecto sería "ip a" pero no sé como hacer con grep para sacar mi ip desde ahí, la cual debería ser 192.168.0.16 he probado con "grep -o -m 1 -E "192.168.0.[0-99]" pero me da 192.168.0.1 y 192.168.0.2, seguiré buscando para solucionarlo.

 

PD3: Lo conseguí hacer con hostname -I, pero no se si servirá en todas las siituaciones, solo me falta tocar alguna cosita al código para dejarlo a mi gusto.

 

PD4: Dejo el código final tal y como lo he dejado funcionando para mí, si no seleccionas nada, solo dar Intro compartes la carpeta Descargas de tu home en 192.168.X.X:8000

 

#!/bin/bash

echo
echo 'Compartidor de archivos al vuelo.'
echo '¿Continuar? [S/n]: '
read r

if [ -z $r ] || [ $r = 's' ] || [ $r = 'S' ]
then
	echo 'Ruta de la carpeta [~/Descargas]: '
	read narchivo
	echo
else
    echo 'Saliendo.'
	exit 1
fi

if [ -n $narchivo ]
then
	echo 'Puerto de conexión [8000]: '
    echo 'Debes especificar un puerto entre 1024 y 10000.'
	read npuerto
	echo
else
    echo 'No has seleccionado una ruta válida.'
    echo 'Saliendo.'
    exit 1
fi

if  [ "$npuerto" = "" ] || [ "$npuerto" -lt 1024 ] || [ "$npuerto" -gt 10000 ]
then
	npuerto=8000
else
    echo 'No se puede compartir a través de ese puerto.'
    echo 'Saliendo.'
    exit 1
fi

if [ -z $narchivo ]
then
    narchivo=~
    narchivo=$narchivo'/Descargas/'
    nruta=$(echo $narchivo | sed 's/[^\/]*$//')
else
    nruta=$(echo $narchivo | sed 's/[^\/]*$//')
fi

ndireccion=$(hostname -I)

python3 -m http.server --bind $ndireccion --directory $nruta $npuerto &
npid=$!

echo 'Pulsa INTRO para dejar de compartir y salir'
echo 'Compartiendo '$nruta
read finito
echo 'Saliendo.'
kill $npid

 

Gracias de nuevo a nible por el aporte.

Editado por mijailbellum

Compartir este post


Enlace al post
Compartir en otros sitios

Registra una cuenta o conéctate para comentar

Debes ser un miembro de la comunidad para dejar un comentario

Crear una cuenta

Regístrate en nuestra comunidad. ¡Es fácil!

Registrar una cuenta nueva

Iniciar Sesión

¿Ya tienes cuenta? Conéctate aquí.

Iniciar Sesión

×