Copiar las fotos de un Android usando la línea de comandos

No sigas leyendo (no es un imperativo) si crees que los ordenadores sólo deberían tener interfaces gráficas y que teclear ordenes es un error.  Pero si no tienes ningún problema con eso ni te interesa defenderlo, haz clic aquí para ir al grano con el tema copiar fotos (tampoco es un imperativo).

¿Estás ahí todavía? Quizás tienes dudas sobre el valor de teclear ordenes a la hora de interactuar con un ordenador, pero no discutes que saber idiomas es una ventaja importante.  No hace tantos lustros que saber idiomas apenas tenía valor. De hecho, la mayoría no sabía leer ni escribir en su propio idioma.  Quizás nadie te dijo que existen muchas similitudes entre un idioma verbal y los lenguajes informáticos. Nos ayudan a desarrollar pensamiento lógico, no son tan complicados, y poco a poco atraen más gente. El motivo es similar al que hizo que nos interesáramos en los idiomas: la evolución de la sociedad.  Hace 200 años porque viajábamos más lejos, más gente aprendió a leer y empezaron a llegar libros de partes remotas, escritos en lenguas diferentes; en el siglo XXI porque estamos rodeados de aparatos que respiran lenguajes informáticos. De hecho, empiezan los primeros intentos de enseñar lenguajes de programación a los niños.  Estoy seguro que llegará el día en que conocer un lenguaje informático será tan común como hoy saber inglés. ¿Puedes imaginar la revolución que supone que la mayoría, de todos los oficios y sensibilidades, sea capaz de mantener conversaciones profundas con sus ordenadores? Similar a la que ocurrió cuando la mayoría supo leer y escribir.

Sigues aquí. Felicidades por tu interés; estás más preparado para el futuro que la mayoría de los que te rodean.

Bueno, tampoco quiero engañarte… en realidad no veremos un lenguaje informático. Pero estarás cerca. Sólo quería despertar tu interés por el tema. También puede suceder algo razonablemente importante: que te sientas mal cuando le expliques al cuñado cómo pasaste las fotos del móvil.  Ya sabes; necesita ridiculizar todo aquello que es incapaz de aprender. Qué patetipesadez de tío.

En realidad escribirás llamadas, con parámetros, a programas que ya están en tu Android.  No es tan nuevo: hasta ahora para llamarlos hiciste un tap en el icono de una app.  A continuación aparecía una pantalla donde podías responder preguntas y rellenar cosas; eran los parámetros.  Ahora lo harás tecleando en el PC.

Copiarás las fotos al PC y luego las borrarás, pero dejando sólo las más recientes por si todavía te da por publicarlas –a veces hacemos muchas fotos en poco tiempo, y luego  dosificamos la publicación para no acaparar el timeline de nuestros seguidores. ¿Existe una app que haga todo eso? Ni lo sé ni me interesa: tengo la línea de ordenes.  Pronto tú también.

Empecemos

En primer lugar tienes que instalar SSHDroid en el móvil. Lo convierte en un servidor SSH, un software que permite dialogar con él a través de órdenes.

Si te interesa saber un poco más acerca lo que instalas, el Secure Shell (SSH) es un protocolo estándar tan extendido y popular, para teclear ordenes, como lo es el SMTP para el correo.  Por ejemplo, en menéame administramos los servidores y actualizamos el web con SSH.  Es como si tuviésemos el servidor delante, pero está en las instalaciones de Amazon en Dublín.  Además todo circula cifrado, y ningún atacante podrá saber qué haces. Desde tu PC harás cosas el móvil, que podrá estar en el fondo de cualquier cajón de casa –y no hace falta que ni tú y el PC estéis en casa.

Una vez instalado SSHDroid, necesitas un cliente SSH para el PC. Si tienes GNU/Linux o te enamoraste de MacOS no lo necesitas, viene de serie, pero si Windows te tiene a ti, entonces baja PuTTY.  Es un .exe que no necesita instalación, basta que lo cliquees para que arranque.

Para conectar con el móvil necesitas su dirección IP y el puerto por el que SSH escucha.  Está todo en la pantalla que verás cuando arranques SSHDroid.  En este caso, la dirección es 198.168.1.33 y el puerto el 2222:

Pantalla principal del SSHDroid

Pantalla principal del SSHDroid

No uso Windows, así que no puedo probar cómo conectar con PuTTY y explicártelo, pero seguro que lo consigues –si es que no tras varios intentos, usa los comentarios.

Abro un terminal de GNU/Linux, el de una Ubuntu mismamente. Aparece eso:

benjami@codol:~$

Es el nombre de usuario, una ‘@’, el nombre del ordenador y la carpeta (directorio para los más puristas) dónde me encuentro.  A continuación el signo ‘$’, que es el aviso que a partir de ahí es dónde puedo teclear.  Escribo la orden ssh con el usuario del móvil (root), una ‘@’, la IP y con -p indico que el puerto es el 2222:

$ ssh root@198.168.1.33 -p 2222

NOTA: Al dar instrucciones escritas sobre ordenes, existe la costumbre de escribir el ‘$’ para indicar que lo que viene a continuación es la orden a teclear. Hazlo sin escribir el ‘$’.

El móvil contesta con

SSHDroid
Use 'root' as username
Default password is 'admin'
root@198.168.1.33's password:

NOTA: La primera vez que conectes por ssh te pedirá aceptar una clave. Tú di que yes y a correr.

Tecleo la contraseña que amablemente SSHDroid me chiva: admin. Mientras lo hago parece que no sucede nada, pero en realidad pasa que SSH es así de tiquismiquis con la seguridad. Al pulsar Intro, si la contraseña es correcta, aparece

~/data/berserker.android.apps.sshdroid/home $

Recuerda: la ‘$’ indica que puedo teclear una orden. Esta será para el móvil porque ya estoy ‘dentro’.  Ya le puedo decir cosas –no, un OLA K ASE todavía no funciona.

El primer paso consiste en situarme en la carpeta donde están las fotos.  No te explico  cómo la averigüé  porque significaría irme por las ramas –más que hasta ahora.  Lo encontrarás al final de este apunte.  Tecleo

$ cd /storage/emulated/legacy/DCIM/

y contesta con

/storage/emulated/legacy/DCIM $

Lo que está a la izquierda del ‘$’ es la carpeta donde estoy: la DCIM que se encuentra dentro la legacy, situada en el interior de la emulated que está dentro la storage. Esa sucesión de nombres y barras es la forma que usan los sistemas operativos de la familia POSIX para identificar cada carpeta.

¿Estás haciéndolo? Vamos a experimentar.  Si ahora tecleas ls verás la lista de fotos.  Vale, si tienes muchas fotos se pierde porque no cabe en la pantalla.  Tiene arreglo: teclea ls | less y la lista estará paginada para que te puedas desplazar con las teclas de siempre, AvPág, RePág, Inicio y Fin. Puedes salir del paginado pulsando q.  Ahora verás esa misma lista más completa tecleando ls -larth | less.  Tienes detalles de cada archivo y la lista está ordenada por fecha.  Te invito a probar todo eso para que sospeches que hay muchas posibilidades, sí.  En este mismo apunte aprenderás algo más de esa forma de dar trabajo a tu móvil.

Copiar las fotos

A lo que íbamos: copiaremos los archivos a una carpeta del PC; a la Android que está dentro la carpeta Fotos.  Lo conseguiremos tecleando la orden scp seguida del origen y finalmente el destino de la copia. Usaremos los parámetros p y r.  La p (de ‘preserve’)  para que mantenga las fechas de los archivos en destino, y la r (de ‘recursive’) para que copie todas las carpetas que haya dentro de la carpeta origen de la copia.

Para saber el destino necesitamos conocer la IP del PC.  Ni idea de cómo se averigua en Windows ni MacOS, pero en GNU/Linux es fácil: en cualquier terminal (puedes abrir más) teclea ifconfig y busca la IP en la entrada wlan0, que es la de la WiFi.  En mi caso es la 198.168.1.44.

Ese es mi SCP:

$ scp -pr * benjami@198.168.1.44:~/Fotos/Android

NOTA: si usas PuTTY la orden es diferente y hacen falta algunos programas más para el scp. Sin Windows no puedo probarlo, pero sé que hace falta el PSCP que encontrarás en la página de descarga del PutTTY. Luego lee el manual del PSCP; intenta trasladar lo que explico del scp.

Las opciones p y r que te expliqué van tras un guión –es un indicador «eso de ahí son opciones» habitual en casi todas las ordenes.

A continuación está el origen, que es un asterisco que indica «todo lo que hay en la carpeta donde estamos» –y que antes hemos revisado jugando con los ls.

Finalmente el destino: una carpeta de tu PC.  La forma de decir eso es escribiendo el nombre del usuario, una ‘@’, la IP del PC, los dos puntos y el signo ‘~’  y la ruta.

El signo ‘~’ es una abreviatura que significa  «la carpeta del usuario especificado antes de la ‘@’», porque también podrías copiar las fotos fuera de la carpeta del usuario.  La ruta es aquella sucesión de carpetas separada por una barra ‘/’.

Te preguntará la contraseña del usuario, y tampoco verás nada al teclearla. Si es correcta, los nombres de los archivos con fotos desfilarán ante ti, junto a su tamaño y la velocidad de transmisión, tiempo estimado… cosas que en una abstracción gráfica se convierten en un molinillo. O esa barra que va cambiando de color, tiene animaciones muy resultonas y, quizás, un porcentaje que casi nunca cuadra. Pero son taaan bonitas.

Ahora puedes dejar en el móvil las fotos del último mes con

$ find . -type f -mtime +30 -exec rm {} \;

Se trata de una orden destructiva, así que antes de enviarla te sugiero que te asegures que todas las fotos están bien en el PC.

A estas alturas ya puedes usar el manual del find para saber qué son esas opciones.  Lo encontrarás buscando find manpage en el web.

Ya está.  Para abandonar SSH basta que teclees exit. Luego pulsa el botón Stop en la app SSHDroid del móvil.

Extras

Puede que tengas fotos en más carpetas.  Por ejemplo, la cámara del Line las guarda en /mnt/sdcard/LINEcamera/ O las del WhatsApp. Lo averigué buscando todos los archivos jpg y fijándome en las carpetas donde estaban.  El find lo hace:

$ find / -type f -iname *jpg | less

También sabes cómo funciona el paginador cuando añades | less a una orden.

Cuando tecleas ordenes, la tecla TAB las autocompleta.  Así, al escribir cd /sto, un golpe de TAB la completa hasta cd /storage/  En ese punto, otro TAB muestra las posibilidades que puedes teclear, en este caso, las carpetas dentro de /storage/ –y no los archivos, cosa que sí te mostraría un TAB en otras circunstancias, pero ahora estás con la orden cd y la cosa va de moverse por carpetas; el invento es más inteligente de lo que parece a simple vista.  Con la tecla TAB puedes hacer descubrimientos interesantes acerca de lo que hay en tu móvil.

Muchas más posibilidades

No sigo, porque las posibilidades son muchas y me extendí más de lo previsto.  Por ejemplo, ¿cuánto espacio ocupan esas carpetas con música?

$ du -h /storage/emulated/legacy/Music/ | less

Este apunte era sólo un aperitivo, para despertar el hambre, con algo que me pareció práctico y novedoso a la hora de interactuar con un móvil. No todo son app y tap.

Podemos hacerlo porque Android es un sistema operativo sin restricciones. En iOS, basado en Darwin, otro POSIX, es técnicamente posible. Pero no van a ponerte nada fácil que hagas lo que quieras con tu móvil, ¿qué te has creído? Y si lo rompes, qué ¿eh?  Por cierto recuerda llevar siempre ropa interior limpia por si tienes un accidente [modo mamá = off].  En Windows Phone y Blackberry es que no, y punto.

SSH es muy rápido, sin esperas en internet –incluso si no tienes WiFi ni 3G, sólo Edge– porque se trata de ordenes de texto.  Una foto contiene más bits que las que puedas teclear en una semana.

Si quieres aprender más encontrarás docenas de lugares en la red; escoge el que más te guste tras buscar «command line».

En el principio fue la línea de comandos, y en el futuro también. Incluso en móviles y tabletas. Es una cuestión de saber idiomas, aunque no lo parezca.

Entradas relacionadas

8 Comentarios

    • Moltes gràcies, mestre en Giorgio 🙄
  1. Molt interessant!

    només un matís “purista” (encara més “purista” que insistir que les carpetes són una cosa i els directoris una altra 😉 :

    Android no és GNU: http://www.gnu.org/gnu/gnu-linux-faq.html#linuxsyswithoutgnu

    «Android contains just as much of Linux as GNU/Linux does. What it doesn’t have is the GNU system»

  2. No coneixia el matís, gràcies Kiko. Ho havia donat per fet, car hi són les GNU Coreutils –de fet l’ls que esmento ho és.

    Ho modifico, que això no és premsa escrita amb tinta 🙂

    Per cert, al Twitter em suggerien automatitzar la còpia de fotos amb el cron. Però caldria assegurar-se que la destinació és a la vista i per WiFi. Fa ganes pensar un script %-)

  3. De fet, el ls que duu android no és de les coreutils, és de toolbox (http://www.elinux.org/Busybox_replacement_project).

    Això, a part que el ls que empres des de la linia de comandes del sshdroid no és el d’aquest toolbox del sistema operatiu, és un busybox que duu la pròpia app (si fas un which ls veuràs que apunta a /data/data/berserker.android.apps.sshdroidpro/home/bin/ls , i aquest ls és un enllaç simbòlic al busybox que duu la app).

    Per cert, toolbox és un reemplaç NO GPL de busybox (que sí és GPL) per a evitar problemes d’infracció de llicències.

    Sobre lo de programar una còpia amb el cron, no estic segur que sigui una idea molt pràctica 😉 . Automatitzar-ho amb algun script fàcil de llançar tal vegada, però un cron… no acabo de veure-ho… segur que se llança quan menos bé te vengui ;-)))

  4. Moltes gràcies per tantíssima informació. SSHDroid no té llicèncias GNU/GPL, potser és per això. aig cercar un servidor SSH per Android que ho fos, però no el vaig trobar. En coneixes qualcun?

  5. Jo abans (quan tenia el Nexus One rootejat) vaig provar QuickSSHd (que aleshores requeria root, ara veig que és opcional).

    Ara acabo de veure al fil de xda-developers que SSHDroid està fortament inspirat 😉 en QuickSSHd.

    No he trobat la llicència de cap dels dos programes. Veig que ambdós estàn basats en dropbear (MIT License) i busybox (GPL).

    No tenc clar si pel fet de dur busybox estarien obligats a tenir llicència GPL (si són “derivative work” i tal…).

  6. Sí, és un problema trobar les llicències del programari que instal·lem a l’Android. Sovint penso que si costa tant trobar la llicència, imagina el codi 🙁

    La MIT permet tancar, però la GPL no.

Deja un comentario