{"id":1851,"date":"2013-01-25T22:06:51","date_gmt":"2013-01-25T21:06:51","guid":{"rendered":"http:\/\/blog.bitassa.cat\/?p=1851"},"modified":"2013-01-26T20:34:12","modified_gmt":"2013-01-26T19:34:12","slug":"copiar-las-fotos-de-un-android-usando-la-linea-de-comandos","status":"publish","type":"post","link":"https:\/\/blog.benjami.cat\/es\/arxiu\/2013\/01\/25\/1851\/","title":{"rendered":"Copiar las fotos de un Android usando la l\u00ednea de comandos"},"content":{"rendered":"<p>No sigas leyendo (no es un imperativo) si crees que los ordenadores s\u00f3lo deber\u00edan tener interfaces gr\u00e1ficas y que teclear ordenes es un error. \u00a0Pero si no tienes ning\u00fan problema con eso ni te interesa defenderlo, haz <a href=\"#gogogo\">clic aqu\u00ed<\/a> para ir al grano con el tema copiar fotos (tampoco es un imperativo).<\/p>\n<p><!--more-->\u00bfEst\u00e1s ah\u00ed todav\u00eda? Quiz\u00e1s 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. \u00a0No hace tantos lustros que saber idiomas apenas ten\u00eda valor. De hecho, la mayor\u00eda no sab\u00eda leer ni escribir en su propio idioma. \u00a0Quiz\u00e1s nadie te dijo que existen muchas similitudes entre un idioma verbal y los lenguajes inform\u00e1ticos. Nos ayudan a desarrollar pensamiento l\u00f3gico, no son tan complicados, y poco a poco atraen m\u00e1s gente. El motivo es similar al que hizo que nos\u00a0interes\u00e1ramos\u00a0en los idiomas: la evoluci\u00f3n de la sociedad. \u00a0Hace 200 a\u00f1os porque viaj\u00e1bamos m\u00e1s lejos, m\u00e1s gente aprendi\u00f3 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\u00e1ticos. De hecho, empiezan los primeros intentos de\u00a0<a href=\"http:\/\/www.nytimes.com\/2011\/11\/10\/technology\/personaltech\/computer-programming-for-children-minus-cryptic-syntax.html\" target=\"_blank\" rel=\"noopener\">ense\u00f1ar lenguajes de programaci\u00f3n a los ni\u00f1os<\/a>. \u00a0Estoy seguro que llegar\u00e1 el d\u00eda en que conocer un lenguaje inform\u00e1tico ser\u00e1 tan com\u00fan como hoy saber ingl\u00e9s. \u00bfPuedes imaginar la revoluci\u00f3n que supone que la mayor\u00eda, de todos los oficios y sensibilidades, sea capaz de mantener conversaciones profundas con sus ordenadores? Similar a la que ocurri\u00f3 cuando la mayor\u00eda supo leer y escribir.<\/p>\n<p>Sigues aqu\u00ed. Felicidades por tu inter\u00e9s; est\u00e1s m\u00e1s preparado para el futuro que la mayor\u00eda de los que te rodean.<\/p>\n<p>Bueno, tampoco quiero enga\u00f1arte&#8230; en realidad no veremos un lenguaje inform\u00e1tico. Pero estar\u00e1s cerca.\u00a0S\u00f3lo quer\u00eda despertar tu inter\u00e9s por el tema. Tambi\u00e9n puede suceder algo razonablemente importante: que te sientas mal cuando le expliques al <em>cu\u00f1ado<\/em> c\u00f3mo pasaste las fotos del m\u00f3vil. \u00a0Ya sabes; necesita ridiculizar todo aquello que es incapaz de aprender. Qu\u00e9 <em>patetipesadez<\/em> de t\u00edo.<\/p>\n<p>En realidad <strong>escribir\u00e1s llamadas, con par\u00e1metros, a programas que ya est\u00e1n en tu Android.<\/strong> \u00a0No es tan nuevo: hasta ahora para llamarlos hiciste un <em>tap<\/em> en el icono de una <em>app<\/em>. \u00a0A continuaci\u00f3n aparec\u00eda una pantalla donde pod\u00edas responder preguntas y rellenar cosas; eran los par\u00e1metros. \u00a0Ahora lo har\u00e1s tecleando en el PC.<\/p>\n<p>Copiar\u00e1s las fotos al PC y luego las borrar\u00e1s, pero dejando\u00a0s\u00f3lo las m\u00e1s recientes por si todav\u00eda te da por publicarlas &#8211;a veces hacemos muchas fotos en poco tiempo, y luego \u00a0dosificamos la publicaci\u00f3n para no acaparar el <em>timeline<\/em>\u00a0de nuestros seguidores. \u00bfExiste una <em>app<\/em> que haga todo eso? Ni lo s\u00e9 ni me interesa: tengo la l\u00ednea de ordenes. \u00a0Pronto t\u00fa tambi\u00e9n.<\/p>\n<p><a name=\"gogogo\"><\/a><\/p>\n<h2>Empecemos<\/h2>\n<p>En primer lugar tienes que instalar <strong><a href=\"https:\/\/play.google.com\/store\/apps\/details?id=berserker.android.apps.sshdroid\" target=\"_blank\" rel=\"noopener\">SSHDroid<\/a><\/strong> en el\u00a0m\u00f3vil.\u00a0Lo convierte en un servidor SSH, un software que permite dialogar con \u00e9l a trav\u00e9s de \u00f3rdenes.<\/p>\n<p>Si te interesa saber un poco m\u00e1s acerca lo que instalas, <a href=\"http:\/\/es.wikipedia.org\/wiki\/Secure_Shell\" target=\"_blank\" rel=\"noopener\">el Secure Shell (SSH<\/a>) es un protocolo est\u00e1ndar tan extendido y popular, para teclear ordenes, como lo es el SMTP para el correo. \u00a0Por ejemplo, en men\u00e9ame administramos los servidores y actualizamos el web con SSH. \u00a0Es como si tuvi\u00e9semos el servidor delante, pero est\u00e1 en las instalaciones de Amazon en Dubl\u00edn. \u00a0Adem\u00e1s todo circula cifrado, y ning\u00fan atacante podr\u00e1 saber qu\u00e9 haces. Desde tu PC har\u00e1s cosas el m\u00f3vil, que podr\u00e1 estar en el fondo de cualquier caj\u00f3n de casa &#8211;y no hace falta que ni t\u00fa y el PC est\u00e9is en casa.<\/p>\n<p>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\u00a0<a href=\"http:\/\/www.chiark.greenend.org.uk\/~sgtatham\/putty\/download.html\" target=\"_blank\" rel=\"noopener\">PuTTY<\/a>. \u00a0Es un <em>.exe<\/em> que no necesita instalaci\u00f3n, basta que lo cliquees para que arranque.<\/p>\n<p>Para conectar con el m\u00f3vil necesitas su direcci\u00f3n IP y el puerto por el que SSH escucha. \u00a0Est\u00e1 todo en la pantalla que ver\u00e1s cuando arranques SSHDroid. \u00a0En este caso, la direcci\u00f3n es 198.168.1.33 y el puerto el 2222:<\/p>\n<figure id=\"attachment_1871\" aria-describedby=\"caption-attachment-1871\" style=\"width: 432px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-1871 \" title=\"Pantalla principal del SSHDroid\" alt=\"Pantalla principal del SSHDroid\" src=\"http:\/\/blog.bitassa.cat\/stuff\/2013-01-25-18.27.58.png\" width=\"432\" height=\"768\" srcset=\"https:\/\/blog.benjami.cat\/stuff\/2013-01-25-18.27.58.png 720w, https:\/\/blog.benjami.cat\/stuff\/2013-01-25-18.27.58-168x300.png 168w, https:\/\/blog.benjami.cat\/stuff\/2013-01-25-18.27.58-576x1024.png 576w, https:\/\/blog.benjami.cat\/stuff\/2013-01-25-18.27.58-160x285.png 160w, https:\/\/blog.benjami.cat\/stuff\/2013-01-25-18.27.58-169x300.png 169w\" sizes=\"auto, (max-width: 432px) 100vw, 432px\" \/><figcaption id=\"caption-attachment-1871\" class=\"wp-caption-text\">Pantalla principal del SSHDroid<\/figcaption><\/figure>\n<p>No uso Windows, as\u00ed que no puedo probar c\u00f3mo conectar con PuTTY y explic\u00e1rtelo, pero seguro que lo consigues &#8211;si es que no tras varios intentos, usa los comentarios.<\/p>\n<p>Abro un terminal de GNU\/Linux, el de una Ubuntu mismamente. Aparece eso:<\/p>\n<pre>benjami@codol:~$<\/pre>\n<p>Es el nombre de usuario, una &#8216;@&#8217;, el nombre del ordenador y la carpeta (directorio para los m\u00e1s puristas) d\u00f3nde me encuentro. \u00a0A continuaci\u00f3n el signo &#8216;$&#8217;, que es el aviso que a partir de ah\u00ed es d\u00f3nde puedo teclear. \u00a0Escribo la orden ssh con el usuario del m\u00f3vil (root), una &#8216;@&#8217;, la IP y con <em>-p<\/em> indico que el puerto es el 2222:<\/p>\n<pre>$ ssh root@198.168.1.33 -p 2222<\/pre>\n<p style=\"padding-left: 30px;\">NOTA: Al dar instrucciones escritas sobre ordenes, existe la costumbre de escribir el &#8216;$&#8217; para indicar que lo que viene a continuaci\u00f3n es la orden a teclear. Hazlo sin escribir el &#8216;$&#8217;.<\/p>\n<p>El m\u00f3vil contesta con<\/p>\n<pre>SSHDroid\r\nUse 'root' as username\r\nDefault password is 'admin'\r\nroot@198.168.1.33's password:<\/pre>\n<p style=\"padding-left: 30px;\">NOTA: La primera vez que conectes por ssh te pedir\u00e1 aceptar una clave. T\u00fa di que <em>yes<\/em> y a correr.<\/p>\n<p>Tecleo la contrase\u00f1a que amablemente SSHDroid me chiva: <em>admin<\/em>. Mientras lo hago parece que no sucede nada, pero en realidad pasa que SSH es as\u00ed de tiquismiquis con la seguridad. Al pulsar <em>Intro<\/em>, si la contrase\u00f1a es correcta, aparece<\/p>\n<pre>~\/data\/berserker.android.apps.sshdroid\/home $<\/pre>\n<p>Recuerda: la &#8216;$&#8217; indica que puedo teclear una orden. Esta ser\u00e1 para el m\u00f3vil porque ya estoy &#8216;dentro&#8217;. \u00a0Ya le puedo\u00a0decir cosas &#8211;no, un OLA K ASE todav\u00eda no funciona.<\/p>\n<p>El primer paso consiste en situarme en la carpeta donde est\u00e1n las fotos. \u00a0No te explico \u00a0c\u00f3mo la\u00a0averig\u00fc\u00e9\u00a0 porque significar\u00eda irme por las ramas &#8211;m\u00e1s que hasta ahora. \u00a0Lo encontrar\u00e1s al final de este apunte. \u00a0Tecleo<\/p>\n<pre>$ cd \/storage\/emulated\/legacy\/DCIM\/<\/pre>\n<p>y contesta con<\/p>\n<pre>\/storage\/emulated\/legacy\/DCIM $<\/pre>\n<p>Lo que est\u00e1 a la izquierda del &#8216;$&#8217; es la carpeta donde estoy: la <em>DCIM<\/em> que se encuentra dentro la <em>legacy<\/em>, situada en el interior de la <em>emulated<\/em> que est\u00e1 dentro la <em>storage<\/em>. Esa sucesi\u00f3n de nombres y barras es la forma que usan los sistemas operativos de la familia\u00a0<a href=\"http:\/\/es.wikipedia.org\/wiki\/POSIX\" target=\"_blank\" rel=\"noopener\">POSIX<\/a>\u00a0para identificar cada carpeta.<\/p>\n<p>\u00bfEst\u00e1s haci\u00e9ndolo? Vamos a experimentar. \u00a0Si ahora tecleas <em>ls<\/em> ver\u00e1s la lista de fotos. \u00a0Vale, si tienes muchas fotos se pierde porque no cabe en la pantalla. \u00a0Tiene arreglo: teclea <em>ls | less<\/em> y la lista estar\u00e1 paginada para que te puedas desplazar con las teclas de siempre,\u00a0<em>AvP\u00e1g<\/em>, <em>ReP\u00e1g<\/em>, <em>Inicio<\/em> y <em>Fin<\/em>. Puedes salir del paginado pulsando <em>q<\/em>. \u00a0Ahora ver\u00e1s esa misma lista m\u00e1s completa tecleando <em>ls -larth | less<\/em>. \u00a0Tienes detalles de cada archivo y la lista est\u00e1 ordenada por fecha. \u00a0Te invito a probar todo eso para que sospeches que hay muchas posibilidades, s\u00ed. \u00a0En este mismo apunte aprender\u00e1s algo m\u00e1s de esa forma de dar trabajo a tu m\u00f3vil.<\/p>\n<h2>Copiar las fotos<\/h2>\n<p>A lo que \u00edbamos: copiaremos los archivos a una carpeta del PC; a la Android que est\u00e1 dentro la carpeta Fotos. \u00a0Lo conseguiremos tecleando la <strong>orden <em>scp<\/em><\/strong> seguida del <strong>origen<\/strong> y finalmente el <strong>destino<\/strong> de la copia. Usaremos los <strong>par\u00e1metros<\/strong> <em>p<\/em> y <em>r<\/em>. \u00a0La <em>p<\/em> (de &#8216;preserve&#8217;) \u00a0para que mantenga las fechas de los archivos en destino, y la <em>r<\/em> (de &#8216;recursive&#8217;) para que copie todas las carpetas que haya dentro de la carpeta origen de la copia.<\/p>\n<p>Para saber el <strong>destino<\/strong> necesitamos conocer la IP del PC. \u00a0Ni idea de c\u00f3mo se averigua en Windows ni MacOS, pero en GNU\/Linux es f\u00e1cil: en cualquier terminal (puedes abrir m\u00e1s) teclea\u00a0<em>ifconfig<\/em> y busca la IP en la entrada <em>wlan0<\/em>, que es la de la WiFi. \u00a0En mi caso es la 198.168.1.44.<\/p>\n<p>Ese es mi SCP:<\/p>\n<pre>$ scp -pr * benjami@198.168.1.44:~\/Fotos\/Android<\/pre>\n<p style=\"padding-left: 30px;\">NOTA: si usas PuTTY la orden es diferente y hacen falta algunos programas m\u00e1s para el <em>scp<\/em>. Sin Windows no puedo probarlo, pero s\u00e9 que hace falta el PSCP<em>\u00a0<\/em>que encontrar\u00e1s en la <a href=\"http:\/\/www.chiark.greenend.org.uk\/~sgtatham\/putty\/download.html\" target=\"_blank\" rel=\"noopener\">p\u00e1gina de descarga del PutTTY<\/a>. Luego <a href=\"http:\/\/the.earth.li\/~sgtatham\/putty\/0.62\/htmldoc\/Chapter5.html#pscp\" target=\"_blank\" rel=\"noopener\">lee el manual del PSCP<\/a>; intenta trasladar lo que explico del <em>scp<\/em>.<\/p>\n<p>Las <strong>opciones<\/strong> <em>p<\/em> y <em>r<\/em> que te expliqu\u00e9 van tras un gui\u00f3n &#8211;es un indicador \u00abeso de ah\u00ed son opciones\u00bb habitual en casi todas las ordenes.<\/p>\n<p>A continuaci\u00f3n est\u00e1 el <strong>origen<\/strong>, que es un asterisco que indica \u00abtodo lo que hay en la carpeta donde estamos\u00bb &#8211;y que antes hemos revisado jugando con los\u00a0<em>ls<\/em>.<\/p>\n<p>Finalmente el <strong>destino<\/strong>: una carpeta de tu PC. \u00a0La forma de decir eso es escribiendo el nombre del usuario, una &#8216;@&#8217;, la IP del PC, los dos puntos y el signo &#8216;~&#8217; \u00a0y la ruta.<\/p>\n<p style=\"padding-left: 30px;\">El signo &#8216;~&#8217; es una abreviatura que significa \u00a0\u00abla carpeta del usuario especificado antes de la &#8216;@&#8217;\u00bb, porque tambi\u00e9n podr\u00edas copiar las fotos fuera de la carpeta del usuario. \u00a0La ruta es\u00a0aquella sucesi\u00f3n de carpetas separada por una barra &#8216;\/&#8217;.<\/p>\n<p>Te preguntar\u00e1 la contrase\u00f1a del usuario, y tampoco ver\u00e1s nada al teclearla. Si es correcta, los nombres de los archivos con fotos desfilar\u00e1n ante ti, junto a su tama\u00f1o y la velocidad de transmisi\u00f3n, tiempo estimado&#8230; cosas que en una abstracci\u00f3n gr\u00e1fica se convierten en un molinillo. O esa barra que va cambiando de color, tiene animaciones muy resultonas y, quiz\u00e1s, un porcentaje que casi nunca cuadra. Pero son taaan bonitas.<\/p>\n<p>Ahora puedes dejar en el m\u00f3vil las fotos del \u00faltimo mes con<\/p>\n<pre>$ find . -type f -mtime +30 -exec rm {} \\;<\/pre>\n<p>Se trata de una orden destructiva, as\u00ed que antes de enviarla te sugiero que te asegures que todas las fotos est\u00e1n bien en el PC.<\/p>\n<p>A estas alturas ya puedes usar el manual del <em>find<\/em> para saber qu\u00e9 son esas opciones. \u00a0Lo encontrar\u00e1s buscando <em>find manpage<\/em>\u00a0en el web.<\/p>\n<p>Ya est\u00e1. \u00a0Para abandonar SSH basta que teclees\u00a0<em>exit<\/em>. Luego pulsa el bot\u00f3n Stop en la app SSHDroid del m\u00f3vil.<\/p>\n<h2>Extras<\/h2>\n<p>Puede que tengas fotos en m\u00e1s carpetas. \u00a0Por ejemplo, la c\u00e1mara del Line las guarda en\u00a0<em>\/mnt\/sdcard\/LINEcamera\/<\/em>\u00a0O las del WhatsApp. Lo averigu\u00e9 buscando todos los archivos <em>jpg<\/em> y fij\u00e1ndome en las carpetas donde estaban. \u00a0El <em>find<\/em> lo hace:<\/p>\n<pre>$ find \/ -type f -iname *jpg | less<\/pre>\n<p>Tambi\u00e9n sabes c\u00f3mo funciona el paginador cuando a\u00f1ades <em>| less<\/em> a una orden.<\/p>\n<p>Cuando tecleas ordenes,<strong> la tecla <em>TAB<\/em><\/strong> las autocompleta. \u00a0As\u00ed, al escribir <em>cd \/sto<\/em>, un golpe de <em>TAB<\/em> la completa hasta <em>cd \/storage\/<\/em> \u00a0En ese punto, otro <em>TAB<\/em>\u00a0muestra las posibilidades que puedes teclear, en este caso, las carpetas dentro de <em>\/storage\/<\/em> &#8211;y no los archivos, cosa que s\u00ed te mostrar\u00eda un <em>TAB<\/em> en otras circunstancias, pero ahora est\u00e1s con la orden <em>cd<\/em> y la cosa va de moverse por carpetas; el invento es m\u00e1s inteligente de lo que parece a simple vista. \u00a0Con la tecla <em>TAB<\/em> puedes hacer descubrimientos interesantes acerca de lo que hay en tu m\u00f3vil.<\/p>\n<h2>Muchas m\u00e1s posibilidades<\/h2>\n<p>No sigo, porque las posibilidades son muchas y me extend\u00ed m\u00e1s de lo previsto. \u00a0Por ejemplo, \u00bfcu\u00e1nto espacio ocupan esas carpetas con m\u00fasica?<\/p>\n<pre>$ du -h \/storage\/emulated\/legacy\/Music\/ | less<\/pre>\n<p>Este apunte era s\u00f3lo un aperitivo, para despertar el hambre, con algo que me pareci\u00f3 pr\u00e1ctico y novedoso a la hora de interactuar con un m\u00f3vil. <strong>No todo son <em>app<\/em> y <em>tap<\/em>.<\/strong><\/p>\n<p>Podemos hacerlo porque Android es un sistema operativo\u00a0<strong>sin restricciones<\/strong>.\u00a0En iOS, basado en <a href=\"http:\/\/en.wikipedia.org\/wiki\/Darwin_(operating_system)\" target=\"_blank\" rel=\"noopener\">Darwin, otro POSIX<\/a>, es t\u00e9cnicamente posible. Pero no van a ponerte nada f\u00e1cil que hagas lo que quieras con tu m\u00f3vil, \u00bfqu\u00e9 te has cre\u00eddo? Y si lo rompes, qu\u00e9 \u00bfeh? \u00a0Por cierto recuerda llevar siempre ropa interior limpia por si tienes un accidente <em>[modo mam\u00e1 = off]<\/em>. \u00a0En Windows Phone y Blackberry es que no, y punto.<\/p>\n<p>SSH es muy r\u00e1pido, sin esperas en internet &#8211;incluso si no tienes WiFi ni 3G, s\u00f3lo Edge&#8211; porque se trata de ordenes de texto. \u00a0Una foto contiene m\u00e1s bits que las que puedas teclear en una semana.<\/p>\n<p>Si quieres aprender m\u00e1s encontrar\u00e1s docenas de lugares en la red; escoge el que m\u00e1s te guste tras buscar \u00abcommand line\u00bb.<\/p>\n<p><a href=\"http:\/\/biblioweb.sindominio.net\/telematica\/command_es\/\" target=\"_blank\" rel=\"noopener\">En el principio fue la l\u00ednea de comandos<\/a>, y en el futuro tambi\u00e9n. Incluso en m\u00f3viles y tabletas. Es una cuesti\u00f3n de saber idiomas, aunque no lo parezca.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>No sigas leyendo (no es un imperativo) si crees que los ordenadores s\u00f3lo deber\u00edan tener interfaces gr\u00e1ficas y que teclear ordenes es un error. \u00a0Pero si no tienes ning\u00fan problema con eso ni te interesa defenderlo, haz clic aqu\u00ed para ir al grano con el tema copiar fotos (tampoco es un imperativo).<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[105],"tags":[220,225,223,222,224,221],"class_list":["post-1851","post","type-post","status-publish","format-standard","hentry","category-bitologia-es","tag-android-es","tag-gnulinux","tag-linea-de-comandos","tag-scp","tag-smartphones","tag-ssh"],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.benjami.cat\/es\/wp-json\/wp\/v2\/posts\/1851","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.benjami.cat\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.benjami.cat\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.benjami.cat\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.benjami.cat\/es\/wp-json\/wp\/v2\/comments?post=1851"}],"version-history":[{"count":0,"href":"https:\/\/blog.benjami.cat\/es\/wp-json\/wp\/v2\/posts\/1851\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.benjami.cat\/es\/wp-json\/wp\/v2\/media?parent=1851"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.benjami.cat\/es\/wp-json\/wp\/v2\/categories?post=1851"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.benjami.cat\/es\/wp-json\/wp\/v2\/tags?post=1851"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}