Con el desarrollo de la tecnología, la claridad de las fotografías y vídeos que tomamos en nuestra vida diaria sigue mejorando, pero esto también tiene una gran desventaja, es decir, su tamaño también es cada vez mayor. Todavía recuerdo que cuando comencé a usar teléfonos inteligentes, una foto tenía solo 2-5MB
, pero ahora una foto ha alcanzado 15-20MB
, o incluso más.
El espacio de almacenamiento en nuestros teléfonos móviles es limitado. ¿Cómo hacemos una copia de seguridad de estas fotos y vídeos para liberar espacio en nuestros teléfonos móviles?
Entonces, al principio almacené todos estos datos en una nube de álbumes de fotos. Aunque el problema de almacenar estos datos se resolvió, también surgieron nuevos problemas, como limitaciones de tamaño de carga y la necesidad de ocupar el fondo todo el tiempo, lo que llevó a al aumento del consumo de energía, publicidad.
Más tarde, simplemente dejé de usarlo y escribí un script para hacer una copia de seguridad de los datos, por lo que apareció este artículo.
Utilicé Node.js
y adb
para crear este script y lo MIB
Esta pequeña herramienta se implementa mediante la depuración adb
en el teléfono móvil, leyendo y copiando información de archivos y moviendo archivos en el teléfono móvil a través de comandos shell
.
Dibujé un MIB
de flujo simple
hasta el final del nodo.
instale el entorno requerido
y descargue adb
, que se utiliza para realizar varias operaciones del dispositivo.
Descargue Node.js
Creo que todos los hermanos ya tienen la biblioteca de dependencias de instalación fs-extra en sus computadoras
:
fs-extra
biblioteca Node
Basado en la encapsulación secundaria del módulo fs
prompts
Biblioteca Node
para interacción en la línea de comandowinston
: Biblioteca Node
para registrar registros de script.Dado
que el código fuente del proyecto es demasiado, solo pongo la parte del código principal.
los amigos pueden ir a
github
para ver el código fuente del proyecto github.com/QC2168/mib
lee el archivo de configuración
export const getConfig = (): ConfigType => { si (existConf()) { devolver readJsonSync(CONFIG_PATH); } // No se puede encontrar el archivo de configuración return createDefaultConfig(); };
Al ejecutar el script, seleccione el ID
del dispositivo del que se debe realizar una copia de seguridad. Y especifique el dispositivo al ejecutar el comando adb
(async () => { dispositivo constante: cadena | booleano = espera selectDevice(); si (dispositivo) MIB(); })(); exportar const selectDevice = async ():Promise<string|false> => { // Obtener la lista constante de dispositivos: devicesType[] = devices(); si (lista.longitud === 0) { log("No hay ningún dispositivo conectado actualmente, conéctese antes de ejecutar la herramienta", "advertir"); devolver falso; } resultado constante = list.map((i) => ({ título: i.nombre, valor: i.nombre })); const {valor} = esperar mensajes ({ escriba: "seleccionar", nombre: "valor", mensaje: "seleccione su dispositivo", opciones: resultado, }); nombreDeDispositivoActual = valor; devuelve el nombre del dispositivo actual; };después de
atravesar el nodo de respaldo
y seleccionar el dispositivo, ingrese la información del nodo transversal y ejecute copiar el archivo en la ruta especificada (atributo output
en el archivo de configuración)
const MIB = () => { // Obtener el archivo de configuración const {copias de seguridad, salida} = getConfig(); // Determinar si el nodo de respaldo está vacío if (backups.length === 0) { log("El nodo de respaldo actual está vacío", "advertir"); log("Agregue nodos de respaldo en el archivo de configuración", "advertir"); } if (copias de seguridad. longitud > 0) { esPath(salida); // Analiza la última carpeta de la ruta de respaldo backups.forEach((item: SaveItemType) => { log(`Actualmente ejecutando tarea de respaldo:${item.comment}`); const arr = item.path.split("/").filter((i: cadena) => i !== ""); const nombrecarpeta = arr.at(-1); const backupDir = pathRepair(item.path); // Directorio de respaldo // Determinar si hay un directorio de respaldo en el nodo // Empalmar la ruta de exportación const rootPath = pathRepair(pathRepair(output) + folderName); const OutputDir = elemento.salida ? elemento.salida && rutaReparación(elemento.salida) : ruta raíz; // Determinar si la ruta de respaldo existe if (!isPathAdb(backupDir)) { log(`Ruta de respaldo:${backupDir} no existe y se ha omitido`, "error"); } demás { // Determinar la ruta de exportación isPath(outputDir); copia de seguridad (backupDir, outputDir, item.full); } }); } log("El programa finaliza"); }; // Refina los archivos de los que se debe realizar una copia de seguridad e ingrésalos en la cola de copia de seguridad const backup = (destino: cadena, salida: cadena, completo: booleano = falso) => { si (! completo) { // Realizar una copia de seguridad de los datos del archivo que no son de copia de seguridad // Obtener la información del archivo en el teléfono móvil y compararla con el local const { backupQueue } = initData(target, output); // Calcular el volumen y la cantidad ComputeBackupSize(backupQueue); //Ejecutar el programa de copia de seguridad move(backupQueue, salida); } demás { // Sin comparación de archivos, copia de seguridad directa moveFolder(destino, salida); } }; //Mover archivos en la cola de archivos para realizar una copia de seguridad const move = (backupQueue: FileNodeType[], outputDir: string): void => { si (backupQueue.length === 0) { log("No se requiere copia de seguridad"); devolver; } para (archivo constante N de backupQueue) { log(`Copia de seguridad ${fileN.fileName}`); intentar { salida constante: cadena = execAdb( `tire "${fileN.filePath}" "${outputDir + fileN.fileName}"`, ); velocidad constante: cadena | null = out.match(speedReg) !== null ? out.match(speedReg)![0] : "Error al leer la velocidad"; log(`Velocidad de transmisión promedio${velocidad}`); } captura (e: cualquiera) { log(`Error fallido de copia de seguridad ${fileN.fileName}:${e.message}`, "error"); } } };
USB
para realizar copias de seguridad de datosingrese el siguiente comando en la terminal para instalar mib
globalmente.
archivo de script de configuración
npm i @qc2168/mib -g
por primera vez, debe crear un nuevo archivo .mibrc
en el directorio de usuarios y configurar el contenido del parámetro correspondiente.
{ "copias de seguridad": [ { "ruta": "/sdcard/MIUI/sound_recorder/call_rec", "comentario": "Grabación de llamadas" }, { "ruta": "/sdcard/DCIM/Cámara", "comment": "Álbum de fotos local" }, { "ruta": "/sdcard/DCIM/Creativo", "comentario": "Mi creación" }, { "ruta": "/sdcard/Imágenes/weixin", "comentario": "Álbum de fotos de WeChat" }, { "ruta": "/sdcard/tencent/qq_images", "comentario": "álbum de fotos QQ" }, { "ruta": "/sdcard/Imágenes/zhihu", "comentario": "Zhihu" }, { "ruta": "/sdcard/tieba", "comentario": "Tieba" }, { "ruta": "/sdcard/DCIM/Capturas de pantalla", "comentario": "Captura de pantalla" }, { "ruta": "/sdcard/DCIM/screenrecorder", "comentario": "Grabación de pantalla" }, { "ruta": "/sdcard/MIUI/sound_recorder", "comentario": "grabación" }, { "ruta": "/sdcard/MIUI/sound_recorder/app_rec", "comentario": "Grabación de aplicaciones" } ], "salida": "E:/copias de seguridad/MI10PRO" }
Para realizar una copia de seguridad
en la consola, ingrese directamente mib
para activar el script sin otros parámetros.
mib
generará la información correspondiente según el archivo de configuración.
2022-04-09 20:58:11 info Tarea de copia de seguridad actual: Grabación de pantalla2022-04-09 20:58:11 info Cantidad de copia de seguridad 1 2022-04-09 20:58:11 info 24Mb de datos obtenidos 2022-04-09 20:58:11 Tamaño de la copia de seguridad de información 24Mb 2022-04-09 20:58:11 info Copia de seguridad de Screenrecorder-2022-04-08-19-45-51-836.mp4 2022-04-09 20:58:12 información velocidad de transferencia promedio 27,7 MB/s 2022-04-09 20:58:12 info Tarea de copia de seguridad actual: grabación 2022-04-09 20:58:12 info Cantidad de copia de seguridad 0 2022-04-09 20:58:12 Tamaño de la copia de seguridad de información 0Mb 2022-04-09 20:58:12 información No se requiere copia de seguridad 2022-04-09 20:58:13 información El programa finaliza
Dirección original: https://juejin.cn/post/7084889987631710221
Autor: _island