Mit der Entwicklung der Technologie wird die Klarheit der Bilder und Videos, die wir in unserem täglichen Leben aufnehmen, immer besser. Dies hat jedoch auch einen großen Nachteil: Ihre Größe wird immer größer. Ich erinnere mich noch daran, als ich anfing, Smartphones zu benutzen, ein Foto nur 2-5MB
groß war, aber jetzt ist ein Foto 15-20MB
oder sogar größer.
Der Speicherplatz auf unseren Mobiltelefonen ist begrenzt. Wie sichern wir diese Fotos und Videos, um Speicherplatz auf unseren Mobiltelefonen freizugeben?
Also habe ich zu Beginn alle diese Daten in einer Fotoalbum-Cloud gespeichert. Obwohl das Problem der Speicherung dieser Daten gelöst war, traten auch neue Probleme auf, wie z. B. Einschränkungen bei der Upload-Größe und die Notwendigkeit, den Hintergrund ständig zu belegen zu erhöhtem Stromverbrauch anpreisen.
Später hörte ich einfach auf, es zu verwenden und schrieb ein Skript zum Sichern der Daten, sodass dieser Artikel herauskam.
Ich habe Node.js
und adb
verwendet, um dieses Skript zu erstellen, und es als MIB
-
Dieses kleine Tool wird mithilfe von adb
-Debugging auf dem Mobiltelefon, Lesen von Dateiinformationen und Kopieren sowie Verschieben von Dateien auf dem Mobiltelefon über shell
-Befehle implementiert.
Ich habe ein einfaches MIB
bis zum Ende des Knotens.
Installieren Siedie erforderliche Umgebung
und laden Sie adb
-Paket herunter, mit dem verschiedene Gerätevorgänge ausgeführt werden.
Laden Sie Node.js
herunter. Ich glaube, dass alle Brüder bereits über die Installationsabhängigkeitsbibliothek fs-extra verfügen
:
fs-extra
Node
-Bibliothek Basierend auf der sekundären Kapselung des fs
ModulsNode
für die Interaktion auf prompts
Node
winston
Da der Quellcode des Projekts etwas zu umfangreich ist,habe
ich hier nur den Hauptcode eingefügt
Freunde können zu
github
gehen, um den Quellcode des Projekts anzuzeigen. github.com/ QC2168/mib
liest die Konfigurationsdatei
export const getConfig = (): ConfigType => { if (existConf()) { return readJsonSync(CONFIG_PATH); } // Die Konfigurationsdatei kann nicht gefunden werden return createDefaultConfig(); };
Wählen Sie beim Ausführen des Skripts die Geräte ID
aus, die gesichert werden muss. Und geben Sie das Gerät an, wenn Sie adb
-Befehl ausführen
(async () => { const device: string |. boolean = waiting selectDevice(); if (Gerät) MIB(); })(); export const selectDevice = async ():Promise<string|false> => { // Geräte-Const-Liste abrufen: devicesType[] = devices(); if (list.length === 0) { log("Derzeit ist kein Gerät verbunden, bitte verbinden Sie sich, bevor Sie das Tool ausführen", "warn"); return false; } const result = list.map((i) => ({ title: i.name, value: i.name })); const { value } = Warten auf Eingabeaufforderungen ({ Typ: „auswählen“, Name: „Wert“, Meldung: „Bitte wählen Sie Ihr Gerät aus“, Auswahlmöglichkeiten: Ergebnis, }); currentDeviceName = value; return currentDeviceName; };Geben Sie nach
dem Durchlaufen des Sicherungsknotens
und der Auswahl des Geräts die Informationen zum Durchquerungsknoten ein und führen Sie die Kopie der Datei in den angegebenen Pfad aus ( output
in der Konfigurationsdatei).
const MIB = () => { // Konfigurationsdatei abrufen const { Backups, Ausgabe } = getConfig(); // Bestimmen Sie, ob der Backup-Knoten leer ist if (backups.length === 0) { log("Der aktuelle Backup-Knoten ist leer", "warn"); log("Bitte fügen Sie Backup-Knoten in der Konfigurationsdatei hinzu", "warn"); } if (backups. length > 0) { isPath(Ausgabe); // Analysieren Sie den letzten Ordner des Sicherungspfads backups.forEach((item: SaveItemType) => { log(`Sicherungsaufgabe wird derzeit ausgeführt:${item.comment}`); const arr = item.path.split("/").filter((i: string) => i !== ""); const Ordnername = arr.at(-1); const backupDir = pathRepair(item.path); // Sicherungsverzeichnis // Bestimmen Sie, ob im Knoten ein Sicherungsverzeichnis vorhanden ist // Exportpfad zusammenfügen const rootPath = pathRepair(pathRepair(output) +folderName); const OutputDir = item.output ? item.output && pathRepair(item.output) : rootPath; // Bestimmen Sie, ob der Sicherungspfad vorhanden ist if (!isPathAdb(backupDir)) { log(`Backup-Pfad:${backupDir} existiert nicht und wurde übersprungen`, "error"); } anders { // Bestimmen Sie den Exportpfad isPath(outputDir); backup(backupDir, OutputDir, item.full); } }); } log("Programm endet"); }; // Verfeinern Sie die Dateien, die gesichert werden müssen, und geben Sie sie in die Sicherungswarteschlange ein. const backup = (target: string, Output: string, full: boolean = false) => { if (!full) { // Nicht gesicherte Dateidaten sichern // Dateiinformationen im Mobiltelefon abrufen und mit der lokalen Datei vergleichen const { backupQueue } = initData(target, output); // Berechnen Sie das Volumen und die Menge computeBackupSize(backupQueue); //Backup-Programm ausführen move(backupQueue, Output); } anders { // Kein Dateivergleich, direktes Backup moveFolder(target,output); } }; //Zu sichernde Dateien in der Dateiwarteschlange verschieben const move = (backupQueue: FileNodeType[], outputDir: string): void => { if (backupQueue.length === 0) { log("Keine Sicherung erforderlich"); zurückkehren; } for (const fileN of backupQueue) { log(`Sichern von ${fileN.fileName}`); versuchen { const out: string = execAdb( `pull „${fileN.filePath}“ „${outputDir + fileN.fileName}“`, ); const speed: string |. null = out.match(speedReg) !== null ? out.match(speedReg)![0] : „Geschwindigkeit konnte nicht gelesen werden“; log(`Durchschnittliche Übertragungsgeschwindigkeit${speed}`); } Catch (e: any) { log(`Backup ${fileN.fileName} failed error:${e.message}`, "error"); } } };
USB
Anschluss zur Datensicherungden folgenden Befehl in das Terminal ein, um mib
global zu installieren.
Konfigurationsskriptdatei
npm i @qc2168/mib -g
zum ersten Mal verwenden, müssen Sie eine neue .mibrc
Datei im Benutzerverzeichnis erstellen und den entsprechenden Parameterinhalt festlegen.
{ „Backups“: [ { „Pfad“: „/sdcard/MIUI/sound_recorder/call_rec“, „Kommentar“: „Anrufaufzeichnung“ }, { „Pfad“: „/sdcard/DCIM/Kamera“, „comment“: „Lokales Fotoalbum“ }, { „Pfad“: „/sdcard/DCIM/Creative“, „Kommentar“: „Meine Kreation“ }, { „Pfad“: „/sdcard/Pictures/weixin“, „Kommentar“: „WeChat-Fotoalbum“ }, { „Pfad“: „/sdcard/tencent/qq_images“, „Kommentar“: „QQ-Fotoalbum“ }, { „Pfad“: „/sdcard/Pictures/zhihu“, „Kommentar“: „Zhihu“ }, { „Pfad“: „/sdcard/tieba“, „Kommentar“: „Tieba“ }, { „Pfad“: „/sdcard/DCIM/Screenshots“, „Kommentar“: „Screenshot“ }, { „Pfad“: „/sdcard/DCIM/screenrecorder“, „comment“: „Bildschirmaufzeichnung“ }, { „Pfad“: „/sdcard/MIUI/sound_recorder“, „Kommentar“: „Aufnahme“ }, { „Pfad“: „/sdcard/MIUI/sound_recorder/app_rec“, „comment“: „App-Aufzeichnung“ } ], „output“: „E:/backups/MI10PRO“ }Um eine Sicherung
in der mib
durchzuführen
, geben Sie direkt mib ein, um das Skript ohne weitere Parameter auszulösen. DieMIB-
Konsole gibt entsprechende Informationen basierend auf der Konfigurationsdatei aus.
09.04.2022 20:58:11 Info Aktuelle Backup-Aufgabe: Bildschirmaufzeichnung09.04.2022 20:58:11 Info Backup-Menge 1 2022-04-09 20:58:11 Info 24 MB an Daten erhalten 2022-04-09 20:58:11 Info Backup-Größe 24 MB 09.04.2022 20:58:11 Info Sichern Screenrecorder-2022-04-08-19-45-51-836.mp4 09.04.2022 20:58:12 Info Durchschnittliche Übertragungsgeschwindigkeit 27,7 MB/s 09.04.2022 20:58:12 Info Aktuelle Backup-Aufgabe: Aufzeichnung 09.04.2022 20:58:12 Info Backup-Menge 0 2022-04-09 20:58:12 Info Backup-Größe 0 MB 2022-04-09 20:58:12 Info Kein Backup erforderlich 2022-04-09 20:58:13 Info Programm endet
Ursprüngliche Adresse: https://juejin.cn/post/7084889987631710221
Autor: _island