
ด้วยการพัฒนาของเทคโนโลยี ความชัดเจนของรูปภาพและวิดีโอที่เราถ่ายในชีวิตประจำวันของเรายังคงดีขึ้นอย่างต่อเนื่อง แต่ก็มีข้อเสียที่สำคัญเช่นกัน นั่นคือขนาดของพวกมันก็ใหญ่ขึ้นเรื่อยๆ ฉันยังจำได้ว่าเมื่อเริ่มใช้สมาร์ทโฟนครั้งแรก รูปภาพมีขนาดเพียง 2-5MB แต่ตอนนี้รูปภาพมีขนาดถึง 15-20MB หรือใหญ่กว่านั้นอีก

พื้นที่เก็บข้อมูลบนโทรศัพท์มือถือของเรามีจำกัด เราจะสำรองรูปภาพและวิดีโอเหล่านี้เพื่อเพิ่มพื้นที่ว่างบนโทรศัพท์มือถือของเราได้อย่างไร
ดังนั้น ในตอนแรก ฉันจัดเก็บข้อมูลทั้งหมดเหล่านี้ไว้ในคลาวด์อัลบั้มรูป แม้ว่าปัญหาในการจัดเก็บข้อมูลนี้จะได้รับการแก้ไขแล้ว แต่ปัญหาใหม่ ๆ ก็เกิดขึ้น เช่น ข้อจำกัดด้านขนาดการอัปโหลดและความจำเป็นในการครอบครองพื้นหลังตลอดเวลา ซึ่งนำไปสู่ เพื่อเพิ่มการใช้พลังงานโฆษณา
ต่อมาฉันแค่หยุดใช้และเขียนสคริปต์เพื่อสำรองข้อมูล บทความนี้จึงออกมา
ฉันใช้ Node.js และ adb เพื่อสร้างสคริปต์นี้ และตั้งชื่อว่า MIB
เครื่องมือขนาดเล็กนี้ใช้งานโดยใช้การดีบัก adb บนโทรศัพท์มือถือ การอ่านข้อมูลไฟล์และการคัดลอก และการย้ายไฟล์บนโทรศัพท์มือถือผ่านคำสั่ง shell
ฉันวาด MIB งานอย่างง่าย
จนถึงจุดสิ้นสุดของโหนด

ให้ติดตั้งสภาพแวดล้อมที่จำเป็น
และดาวน์โหลดแพ็คเกจ adb ซึ่งใช้ในการดำเนินการอุปกรณ์ต่างๆ
ดาวน์โหลด Node.js ฉันเชื่อว่าพี่น้องทุกคนมีไลบรารี่การพึ่งพาการติดตั้ง fs-extra บนคอมพิวเตอร์อยู่แล้ว
:
fs-extra Nodefsprompts : ไลบรารี Node สำหรับการโต้ตอบบนบรรทัดคำสั่งwinston : ไลบรารี Node สำหรับการบันทึกบันทึกสคริปต์เนื่องจาก
ซอร์สโค้ดของโปรเจ็กต์มากเกินไปเล็กน้อย ฉันจึงใส่เฉพาะส่วนโค้ดหลักที่นี่
เพื่อนๆ สามารถไปที่
githubเพื่อดูซอร์สโค้ดโปรเจ็กต์ github.com/ QC2168/mib
อ่านไฟล์การกำหนดค่า
ที่ส่งออก const getConfig = (): ConfigType => {
ถ้า (existConf()) {
ส่งคืน readJsonSync (CONFIG_PATH);
-
// ไม่พบไฟล์การกำหนดค่า return createDefaultConfig();
}; เมื่อรันสคริปต์ ให้เลือก ID อุปกรณ์ที่ต้องการสำรองข้อมูล และระบุอุปกรณ์เมื่อรันคำสั่ง adb
(async () => {
อุปกรณ์ const: string | .boolean = รอ selectDevice();
ถ้า (อุปกรณ์) MIB();
-
ส่งออก const selectDevice = async (): สัญญา <string | false> => {
// รับรายการอุปกรณ์ const: devicesType[] = อุปกรณ์();
ถ้า (รายการความยาว === 0) {
log("ไม่มีอุปกรณ์เชื่อมต่ออยู่ กรุณาเชื่อมต่อก่อนใช้งานเครื่องมือ", "เตือน");
กลับเท็จ;
-
ผลลัพธ์ const = list.map((i) => ({ title: i.name, value: i.name }));
const { value } = รอพร้อมท์ ({
ประเภท: "เลือก",
ชื่อ: "คุณค่า",
ข้อความ: "โปรดเลือกอุปกรณ์ของคุณ",
ทางเลือก: ผลลัพธ์,
-
currentDeviceName = ค่า;
กลับชื่ออุปกรณ์ปัจจุบัน;
}; หลังจาก สำรวจโหนดสำรอง
และเลือกอุปกรณ์แล้ว ให้ป้อนข้อมูลโหนดแวะและดำเนินการคัดลอกไฟล์ไปยังพาธที่ระบุ (แอตทริบิวต์ output ในไฟล์กำหนดค่า)
const MIB = () => {
// รับไฟล์การกำหนดค่า const { backups, output } = getConfig();
// ตรวจสอบว่าโหนดสำรองว่างเปล่าหรือไม่ถ้า (backups.length === 0) {
log("โหนดสำรองปัจจุบันว่างเปล่า", "เตือน");
log("กรุณาเพิ่มโหนดสำรองในไฟล์กำหนดค่า", "คำเตือน");
-
if (ความยาวการสำรองข้อมูล > 0) {
isPath(เอาท์พุท);
// แยกวิเคราะห์โฟลเดอร์สุดท้ายของเส้นทางสำรอง backups.forEach((item: SaveItemType) => {
log(`กำลังดำเนินการสำรองข้อมูล:${item.comment}`);
const arr = item.path.split("/").filter((i: string) => i !== "");
const ชื่อโฟลเดอร์ = arr.at(-1);
const backupDir = pathRepair (item.path);
// ไดเร็กทอรีสำรอง // ตรวจสอบว่ามีไดเร็กทอรีสำรองในโหนดหรือไม่ // ประกบเส้นทางการส่งออก const rootPath = pathRepair(pathRepair(output) + folderName);
const outputDir = item.output
? item.output && pathRepair (รายการเอาต์พุต)
: rootPath;
// ตรวจสอบว่ามีเส้นทางสำรองอยู่หรือไม่หาก (!isPathAdb(backupDir)) {
log(`เส้นทางสำรอง:${backupDir} ไม่มีอยู่และถูกข้ามไป`, "ข้อผิดพลาด");
} อื่น {
// กำหนดเส้นทางการส่งออก isPath(outputDir);
การสำรองข้อมูล (backupDir, outputDir, item.full);
-
-
-
log("โปรแกรมสิ้นสุด");
-
// ปรับแต่งไฟล์ที่ต้องสำรองข้อมูลและป้อนลงในคิวการสำรองข้อมูล const backup = (เป้าหมาย: สตริง, เอาต์พุต: สตริง, เต็ม: บูลีน = เท็จ) => {
ถ้า (!เต็ม) {
// สำรองข้อมูลไฟล์ที่ไม่ได้สำรองข้อมูล // รับข้อมูลไฟล์ในโทรศัพท์มือถือและเปรียบเทียบกับ const ในเครื่อง { backupQueue } = initData(target, output);
// คำนวณปริมาณและปริมาณ computeBackupSize(backupQueue);
//ดำเนินการย้ายโปรแกรมสำรองข้อมูล (backupQueue, เอาต์พุต);
} อื่น {
// ไม่มีการเปรียบเทียบไฟล์, การสำรองข้อมูลโดยตรง moveFolder(เป้าหมาย, เอาต์พุต);
-
-
//ย้ายไฟล์ในคิวไฟล์ที่จะสำรองข้อมูล const move = (backupQueue: FileNodeType[], outputDir: string): void => {
ถ้า (backupQueue.length === 0) {
log("ไม่จำเป็นต้องสำรองข้อมูล");
กลับ;
-
สำหรับ (const fileN ของ backupQueue) {
log(`กำลังสำรองข้อมูล ${fileN.fileName}`);
พยายาม {
const ออก: string = execAdb(
`ดึง "${fileN.filePath}" "${outputDir + fileN.fileName}"`,
-
ความเร็ว const: string |. null = out.match(speedReg) !== null ? out.match(speedReg)![0] : "ไม่สามารถอ่านความเร็ว";
log(`ความเร็วการส่งเฉลี่ย${ความเร็ว}`);
} จับ (e: ใด ๆ ) {
log(`การสำรองข้อมูล ${fileN.fileName} ล้มเหลว ข้อผิดพลาด:${e.message}`, "ข้อผิดพลาด");
-
-
}; USB เพื่อสำรองข้อมูลให้ป้อนคำสั่งต่อไปนี้ในเทอร์มินัลเพื่อติดตั้ง mib ทั่วโลก
ไฟล์สคริปต์การกำหนดค่า
npm i @qc2168/mib -g
เป็นครั้งแรก คุณจะต้องสร้างไฟล์ .mibrc ใหม่ในไดเร็กทอรีผู้ใช้ และตั้งค่าเนื้อหาพารามิเตอร์ที่เกี่ยวข้อง
-
"สำรองข้อมูล": [
-
"path": "/sdcard/MIUI/sound_recorder/call_rec",
"ความคิดเห็น": "บันทึกการโทร"
-
-
"path": "/sdcard/DCIM/กล้อง",
"ความคิดเห็น": "อัลบั้มภาพท้องถิ่น"
-
-
"path": "/sdcard/DCIM/Creative",
"ความคิดเห็น": "การสร้างของฉัน"
-
-
"path": "/sdcard/Pictures/weixin",
"ความคิดเห็น": "อัลบั้มภาพ WeChat"
-
-
"path": "/sdcard/tencent/qq_images",
"ความคิดเห็น": "อัลบั้มภาพ QQ"
-
-
"path": "/sdcard/Pictures/zhihu",
"ความคิดเห็น": "Zhihu"
-
-
"path": "/sdcard/tieba",
"ความคิดเห็น": "ติบา"
-
-
"path": "/sdcard/DCIM/ภาพหน้าจอ",
"ความคิดเห็น": "ภาพหน้าจอ"
-
-
"path": "/sdcard/DCIM/screenrecorder",
"ความคิดเห็น": "การบันทึกหน้าจอ"
-
-
"path": "/sdcard/MIUI/sound_recorder",
"ความคิดเห็น": "การบันทึก"
-
-
"path": "/sdcard/MIUI/sound_recorder/app_rec",
"ความคิดเห็น": "การบันทึกแอป"
-
-
"เอาท์พุท": "E:/สำรอง/MI10PRO"
} หากต้องการสำรองข้อมูล
ในคอนโซล ให้ป้อน mib โดยตรงเพื่อทริกเกอร์สคริปต์โดยไม่มีพารามิเตอร์อื่น
mib
จะส่งออกข้อมูลที่เกี่ยวข้องตามไฟล์การกำหนดค่า
2022-04-09 20:58:11 ข้อมูล งานสำรองข้อมูลปัจจุบัน: การบันทึกหน้าจอ2022-04-09 20:58:11 ข้อมูล ปริมาณการสำรองข้อมูล 1 2022-04-09 20:58:11 ข้อมูล ได้รับข้อมูล 24Mb 2022-04-09 20:58:11 ข้อมูลสำรองขนาด 24Mb 09-04-2022 20:58:11 ข้อมูล การสำรองข้อมูล Screenrecorder-2022-04-08-19-45-51-836.mp4 09-04-2022 20:58:12 ข้อมูลความเร็วการถ่ายโอนเฉลี่ย 27.7 MB/s 2022-04-09 20:58:12 ข้อมูล งานสำรองข้อมูลปัจจุบัน: การบันทึก 2022-04-09 20:58:12 ข้อมูล ปริมาณการสำรองข้อมูล 0 09-04-2022 20:58:12 ข้อมูลสำรองขนาด 0Mb 2022-04-09 20:58:12 ข้อมูล ไม่ต้องสำรองข้อมูล 2022-04-09 20:58:13 ข้อมูล สิ้นสุดโปรแกรม
ที่อยู่เดิม: https://juejin.cn/post/7084889987631710221
ผู้แต่ง: _island