Avec le développement de la technologie, la clarté des photos et des vidéos que nous prenons dans notre vie quotidienne continue de s'améliorer, mais cela présente également un inconvénient majeur, à savoir que leur taille devient également de plus en plus grande. Je me souviens encore que lorsque j'ai commencé à utiliser des smartphones, une photo ne faisait que 2-5MB
, mais maintenant une photo atteint 15-20MB
, voire plus.
L'espace de stockage sur nos téléphones mobiles est limité. Comment sauvegarder ces photos et vidéos pour libérer de l'espace sur nos téléphones mobiles ?
Ainsi, au début, j'ai stocké toutes ces données dans un cloud d'album photo. Bien que le problème du stockage de ces données ait été résolu, de nouveaux problèmes sont également apparus, comme les contraintes de taille de téléchargement et la nécessité d'occuper l'arrière-plan en permanence, ce qui a conduit. à une consommation d'énergie accrue, faire de la publicité.
Plus tard, j'ai simplement arrêté de l'utiliser et j'ai écrit un script pour sauvegarder les données, c'est pourquoi cet article est sorti.
J'ai utilisé Node.js
et adb
pour créer ce script et je l'ai nommé MIB
Ce petit outil est implémenté en utilisant le débogage adb
sur le téléphone mobile, en lisant les informations sur les fichiers, en les copiant et en déplaçant les fichiers sur le téléphone mobile via des commandes shell
.
J'ai dessiné un MIB
simple
jusqu'à la fin du nœud.
installez l'environnement requis
et téléchargez adb
, qui est utilisé pour effectuer diverses opérations sur l'appareil.
Téléchargez Node.js
Je pense que tous les frères ont déjà la bibliothèque de dépendances d'installation fs-extra sur leurs ordinateurs
:
fs-extra
bibliothèque Node
basé sur l'encapsulation secondaire du module fs
.prompts
: Bibliothèque Node
pour l'interaction sur la ligne de commandewinston
: Bibliothèque Node
pour l'enregistrement des journaux de scriptComme le code source du projet est un peu trop long, je ne mets icique
la partie principale du code.
les amis peuvent aller sur
github
pour voir le code source du projet github.com/ QC2168/mib
lit le fichier de configuration
export const getConfig = (): ConfigType => { si (existeConf()) { retourner readJsonSync(CONFIG_PATH); } // Le fichier de configuration est introuvable return createDefaultConfig(); };
Lors de l'exécution du script, sélectionnez l' ID
du périphérique qui doit être sauvegardé. Et spécifiez le périphérique lors de l'exécution de la commande adb
(async () => { périphérique const : chaîne | booléen = attendre selectDevice(); si (périphérique) MIB(); })(); export const selectDevice = async ():Promise<string|false> => { // Récupère la liste const des appareils : devicesType[] = devices(); si (liste.longueur === 0) { log("Aucun appareil n'est actuellement connecté, veuillez vous connecter avant d'exécuter l'outil", "warn"); renvoie faux ; } const result = list.map((i) => ({ titre : i.name, valeur : i.name })); const { valeur } = invites d'attente ({ tapez : "sélectionner", nom : "valeur", message : "veuillez sélectionner votre appareil", choix : résultat, }); currentDeviceName = valeur ; renvoie le nom du périphérique actuel ; };Après
avoir traversé le nœud de sauvegarde
et sélectionné le périphérique, entrez les informations du nœud de traversée et exécutez la copie du fichier vers le chemin spécifié (attribut output
dans le fichier de configuration)
const MIB = () => { // Récupère le fichier de configuration const { sauvegardes, sortie } = getConfig(); // Détermine si le nœud de sauvegarde est vide if (backups.length === 0) { log("Le nœud de sauvegarde actuel est vide", "warn"); log("Veuillez ajouter des nœuds de sauvegarde dans le fichier de configuration", "warn"); } if (sauvegardes. longueur > 0) { isPath(sortie); // Analyse le dernier dossier du chemin de sauvegarde backups.forEach((item: SaveItemType) => { log(`Tâche de sauvegarde en cours d'exécution :${item.comment}`); const arr = item.path.split("/").filter((i: string) => i !== ""); const nom_dossier = arr.at(-1); const backupDir = pathRepair(item.path); // Répertoire de sauvegarde // Détermine s'il existe un répertoire de sauvegarde dans le nœud // Splice le chemin d'exportation const rootPath = pathRepair(pathRepair(output) + dossierName); const OutputDir = item.output ? item.output && pathRepair(item.output) : rootPath; // Détermine si le chemin de sauvegarde existe if (!isPathAdb(backupDir)) { log(`Chemin de sauvegarde :${backupDir} n'existe pas et a été ignoré`, "erreur"); } autre { // Détermine le chemin d'exportation isPath(outputDir); sauvegarde (backupDir, outputDir, item.full); } }); } log("Fin du programme"); } ; // Affinez les fichiers qui doivent être sauvegardés et entrez-les dans la file d'attente de sauvegarde const backup = (target : string, output : string, full : boolean = false) => { si (!complet) { // Sauvegarde les données du fichier non sauvegardées // Récupère les informations du fichier dans le téléphone mobile et compare-les avec la const locale { backupQueue } = initData(target, output); // Calculer le volume et la quantité calculateBackupSize(backupQueue); //Exécuter le programme de sauvegarde move(backupQueue, output); } autre { // Pas de comparaison de fichiers, sauvegarde directe moveFolder(target, output); } } ; //Déplace les fichiers dans la file d'attente des fichiers à sauvegarder const move = (backupQueue: FileNodeType[], outputDir: string): void => { si (backupQueue.length === 0) { log("Aucune sauvegarde requise"); retour; } pour (const fileN de backupQueue) { log(`Sauvegarde ${fileN.fileName}`); essayer { const dehors : chaîne = execAdb ( `pull "${fileN.filePath}" "${outputDir + fileN.fileName}"`, ); const speed: string | null = out.match(speedReg) !== null ? out.match(speedReg)![0] : "Échec de la lecture de la vitesse"; log(`Vitesse de transmission moyenne${speed}`); } catch (e : n'importe lequel) { log(`Echec de la sauvegarde ${fileN.fileName} :${e.message}`, "erreur"); } } } ;
USB
pour sauvegarder les donnéesentrez la commande suivante dans le terminal pour installer mib
globalement.
fichier de script de configuration
npm i @qc2168/mib -g
pour la première fois, vous devez créer un nouveau fichier .mibrc
dans le répertoire utilisateur et définir le contenu des paramètres correspondant.
{ "sauvegardes": [ { "path": "/sdcard/MIUI/sound_recorder/call_rec", "comment": "Enregistrement des appels" }, { "path": "/sdcard/DCIM/Caméra", "comment": "Album photo local" }, { "chemin": "/sdcard/DCIM/Creative", "comment": "Ma création" }, { "path": "/sdcard/Pictures/weixin", "comment": "Album photo WeChat" }, { "path": "/sdcard/tencent/qq_images", "comment": "Album photo QQ" }, { "path": "/sdcard/Pictures/zhihu", "comment": "Zhihu" }, { "path": "/sdcard/tieba", "comment": "Tieba" }, { "path": "/sdcard/DCIM/Captures d'écran", "comment": "Capture d'écran" }, { "path": "/sdcard/DCIM/screenrecorder", "comment": "Enregistrement d'écran" }, { "path": "/sdcard/MIUI/sound_recorder", "comment": "enregistrement" }, { "path": "/sdcard/MIUI/sound_recorder/app_rec", "comment": "Enregistrement de l'application" } ], "sortie": "E:/sauvegardes/MI10PRO" }
Pour effectuer une sauvegarde
dans la console, entrez directement mib
pour déclencher le script sans autres paramètres.
mib
affichera les informations correspondantes basées sur le fichier de configuration.
2022-04-09 20:58:11 info Tâche de sauvegarde en cours : enregistrement d'écran2022-04-09 20:58:11 info Quantité de sauvegarde 1 2022-04-09 20:58:11 info 24 Mo de données obtenues 2022-04-09 20:58:11 taille de sauvegarde des informations 24 Mo 2022-04-09 20:58:11 info Sauvegarde de Screenrecorder-2022-04-08-19-45-51-836.mp4 2022-04-09 20:58:12 info vitesse de transfert moyenne 27,7 Mo/s 2022-04-09 20:58:12 info Tâche de sauvegarde en cours : enregistrement 2022-04-09 20:58:12 info Quantité de sauvegarde 0 2022-04-09 20:58:12 taille de sauvegarde des informations 0 Mo 2022-04-09 20:58:12 info Aucune sauvegarde requise 2022-04-09 20:58:13 info Fin du programme
Adresse originale : https://juejin.cn/post/7084889987631710221
Auteur : _island