ด้วยการพัฒนาของเทคโนโลยี ความชัดเจนของรูปภาพและวิดีโอที่เราถ่ายในชีวิตประจำวันของเรายังคงดีขึ้นอย่างต่อเนื่อง แต่ก็มีข้อเสียที่สำคัญเช่นกัน นั่นคือขนาดของพวกมันก็ใหญ่ขึ้นเรื่อยๆ ฉันยังจำได้ว่าเมื่อเริ่มใช้สมาร์ทโฟนครั้งแรก รูปภาพมีขนาดเพียง 2-5MB
แต่ตอนนี้รูปภาพมีขนาดถึง 15-20MB
หรือใหญ่กว่านั้นอีก
พื้นที่เก็บข้อมูลบนโทรศัพท์มือถือของเรามีจำกัด เราจะสำรองรูปภาพและวิดีโอเหล่านี้เพื่อเพิ่มพื้นที่ว่างบนโทรศัพท์มือถือของเราได้อย่างไร
ดังนั้น ในตอนแรก ฉันจัดเก็บข้อมูลทั้งหมดเหล่านี้ไว้ในคลาวด์อัลบั้มรูป แม้ว่าปัญหาในการจัดเก็บข้อมูลนี้จะได้รับการแก้ไขแล้ว แต่ปัญหาใหม่ ๆ ก็เกิดขึ้น เช่น ข้อจำกัดด้านขนาดการอัปโหลดและความจำเป็นในการครอบครองพื้นหลังตลอดเวลา ซึ่งนำไปสู่ เพื่อเพิ่มการใช้พลังงานโฆษณา
ต่อมาฉันแค่หยุดใช้และเขียนสคริปต์เพื่อสำรองข้อมูล บทความนี้จึงออกมา
ฉันใช้ Node.js
และ adb
เพื่อสร้างสคริปต์นี้ และตั้งชื่อว่า MIB
เครื่องมือขนาดเล็กนี้ใช้งานโดยใช้การดีบัก adb
บนโทรศัพท์มือถือ การอ่านข้อมูลไฟล์และการคัดลอก และการย้ายไฟล์บนโทรศัพท์มือถือผ่านคำสั่ง shell
ฉันวาด MIB
งานอย่างง่าย
จนถึงจุดสิ้นสุดของโหนด
ให้ติดตั้งสภาพแวดล้อมที่จำเป็น
และดาวน์โหลดแพ็คเกจ adb
ซึ่งใช้ในการดำเนินการอุปกรณ์ต่างๆ
ดาวน์โหลด Node.js
ฉันเชื่อว่าพี่น้องทุกคนมีไลบรารี่การพึ่งพาการติดตั้ง fs-extra บนคอมพิวเตอร์อยู่แล้ว
:
fs-extra
Node
fs
prompts
: ไลบรารี 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