3 votos

Manera razonable de copiar archivos a una nueva tarjeta SD usando un Mac

Tengo un Mac y quiero transferir unos 30 GB de datos a una tarjeta SD más grande para utilizarlos con un nuevo teléfono Android.

El teléfono en cuestión es un Galaxy Stratosphere II.

No parece haber una forma sencilla de hacerlo.

Hasta ahora he probado

  • Copia mediante Android File Transfer, con el teléfono conectado por USB. Esto parecía funcionar, funcionando a unos 10 MB/s, pero no conservaba las marcas de tiempo de los archivos, lo cual es inaceptable para mí. Dado que la aplicación parece que sólo proporciona acceso a través de una interfaz de arrastrar y soltar, no creo que haya una manera de utilizarlo para copiar archivos, manteniendo las marcas de tiempo.
  • Copiar con scp -pr vía SSHDroid funcionando en el teléfono, a través de otra red wifi. Esto también funcionó, reteniendo la información de la marca de tiempo, pero fue dolorosamente lento (<1 MB/s).
  • Conectando la SDCard a mi MacBook Pro. No funciona: no es un sistema de archivos reconocido. También he probado a utilizar un lector de tarjetas SD de terceros, con el mismo resultado.
  • Utilizando adb push para copiar archivos a través de una conexión USB. Esto tampoco funciona, incluso cuando añado /. hasta el final como sugiere esta respuesta .

simple-mtpfs podría ser una opción, pero las instrucciones de compilación dadas hacen referencia a ejecutables inexistentes.

Alt Mounter también parece que hace lo que quiero, pero se indica como "***EXTREMADAMENTE BETA***" y por lo tanto no es algo que preferiría confiar con mis archivos importantes.

Cuando actualicé otra tarjeta SD, experimenté copiando archivos a la tarjeta SD en un lector conectado a través de una VM Linux. Esto parecía funcionar, pero misteriosamente se cortaba después de copiar una fracción de los datos. Creo que esa vez terminé usando scp y dejándola funcionar durante uno o dos días.

Sigo indagando en el tema, pero quizás alguien pueda ahorrarme algo de tiempo. ¿Hay una manera fácil de hacer esto?

1voto

Ali Puntos 553

Tanto OSX como Android proporcionan utilidades POSIX básicas, así que terminé yendo a la vieja escuela en este caso:

$ tar czv "$PATH_TO_ORIGINAL_SDCARD" | split -b 2048m - sdcard-

Este comando crea trozos de 2GB de tamaño de un archivo del contenido de la sdcard, con nombres como sdcard-aa , sdcard-ab etc. La división de 2 GB es necesaria porque Android File Transfer sólo puede copiar archivos de 4 GB o menos de tamaño.

Luego copié los archivos al teléfono usando (¡sorpresa!) Android File Transfer y los recombiné y desarchivé en Terminal Emulator* usando este comando:

$ cat sdcard-* | tar xzv

*: en realidad fue un poco más complicado que esto. Detalles sangrientos:

Así que en realidad Android no realmente viene con utilidades POSIX básicas, o al menos si lo hace, no están fácilmente disponibles para la aplicación Emulador de Terminal.

Pensaba que sí porque SSHDroid proporciona estas utilidades a través de busybox . Sospecho que Android no permite que los procesos ejecuten archivos que su usuario no posee; esto explicaría por qué no hay ninguna aplicación disponible que instale busybox para teléfonos no rooteados.

busybox es una utilidad que puede ejecutar cualquiera de un gran número de comandos POSIX, dependiendo del nombre con el que se llame. La gente se las arregla para que sea llamada con nombres distintos de busybox creando enlaces simbólicos con nombres como, por ejemplo, tar .

Sin embargo, resulta que es posible instalar busybox en su propio directorio de inicio de la aplicación Emulador de Terminal. Así que eso es lo que hice. Pasos:

  • Coge el archivo busybox-android de el proyecto homónimo de github .
  • Mételo en tu dispositivo (véase más arriba). Ponlo en algún lugar público al que tengas acceso desde una sesión del Emulador de Terminal. Llámalo busybox .
  • Inicie una sesión del Emulador de Terminal. Cree un directorio ~/bin y copiar el busybox del lugar público donde lo pusiste a ese nuevo directorio.
    • Desde el cp no está disponible en una sesión del Emulador de Terminal (¡!) hágalo de esta manera: cat $PATH_TO_BUSYBOX/busybox > ~/bin/busybox
  • Ahora cd ~/bin y crear un enlace simbólico: ln -s busybox tar .
  • Ahora debería ser capaz de cd /storage/extSdCard/ y concatena y extrae el contenido de tus ficheros de archivo en él utilizando cat $PATH_TO_ARCHIVE/sdcard-* | ~/bin/tar xzv .
  • Se extraerá con los directorios de prefijo que fueran la ruta al contenido de la sdcard cuando creaste el conjunto de archivos, por ejemplo /Volumes/oldphone/ . Así que ahora mueve todo desde ese subdirectorio (lo llamaremos $OLD_SDCARD_CONTENTS ) a root de su tarjeta SD actual.
    • sh (el shell utilizado por Terminal Emulator) no parece tener ninguna forma de seleccionar todos los archivos ocultos de un directorio, así que ejecuté bash para hacerlo. Bajo bash, mv $PATH_TO_FILES/.[^.]* $DEST moverá todos los archivos ocultos. Recuerde que tiene que acceder a bash mediante un enlace simbólico a busybox o simplemente hacer esta parte a través de ssh (que es en realidad lo que hice).

¡Uf! Me alegro de que haya terminado. Realmente espero no acabar aceptando esta respuesta; debería haber una forma mucho más fácil de hacer todo esto.

Por supuesto, podría haber simplemente untarred el archivo en un ssh sesión desde mi ordenador, pero para ello habría tenido que hacer funcionar mi ordenador durante el tiempo que fuera necesario. Además, por supuesto busybox debería estar disponible en el Emulador de Terminal.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X