Dengan berkembangnya teknologi, kejernihan gambar dan video yang kita ambil dalam kehidupan sehari-hari terus meningkat, namun hal ini juga memiliki kelemahan yang besar, yaitu ukurannya yang juga semakin besar. Saya masih ingat saat pertama kali menggunakan smartphone, fotonya hanya berukuran 2-5MB
, namun sekarang foto sudah mencapai 15-20MB
, atau bahkan lebih besar.
Ruang penyimpanan di ponsel kita terbatas. Bagaimana cara mencadangkan foto dan video ini untuk mengosongkan ruang di ponsel kita?
Jadi, pada awalnya saya menyimpan semua data ini di cloud album foto. Meskipun masalah penyimpanan data ini telah teratasi, masalah baru juga muncul, seperti kendala ukuran unggahan dan kebutuhan untuk selalu menempati latar belakang, yang menyebabkannya. untuk meningkatkan konsumsi daya, beriklan.
Kemudian, saya berhenti menggunakannya dan menulis skrip untuk membuat cadangan data, jadi artikel ini keluar.
Saya menggunakan Node.js
dan adb
untuk membuat skrip ini, dan MIB
Alat kecil ini diimplementasikan dengan menggunakan adb
debugging di ponsel, membaca informasi file dan menyalin, dan memindahkan file di ponsel melalui perintah shell
.
Saya menggambar MIB
alur sederhana
sampai akhir simpul.
instal lingkungan yang diperlukan
dan unduh paket adb
, yang digunakan untuk melakukan berbagai operasi perangkat.
Unduh Node.js
Saya yakin semua saudara sudah memiliki perpustakaan ketergantungan instalasi fs-extra di komputer mereka
:
fs-extra
Node
berdasarkan enkapsulasi sekunder dari modul fs
prompts
: Pustaka Node
untuk interaksi pada baris perintahwinston
: Pustaka Node
untuk merekam log skrip.Karena
kode sumber proyek agak terlalu banyak, saya hanya meletakkan bagian kode utama di sini
teman-teman bisa pergi ke
github
untuk melihat kode sumber proyek github.com/ QC2168/mib
membaca file konfigurasi
ekspor const getConfig = (): ConfigType => { jika (adaConf()) { kembalikan readJsonSync(CONFIG_PATH); } // File konfigurasi tidak dapat ditemukan return createDefaultConfig(); };
Saat menjalankan skrip, pilih ID
perangkat yang perlu dicadangkan. Dan tentukan perangkat saat menjalankan perintah adb
(async() => { perangkat const: string |.boolean = menunggu selectDevice(); jika (perangkat) MIB(); })(); ekspor const pilihPerangkat = async ():Janji<string|false> => { // Dapatkan daftar konstanta perangkat: devicesType[] = devices(); if (daftar.panjang === 0) { log("Tidak ada perangkat yang terhubung saat ini, harap sambungkan sebelum menjalankan alat", "peringatkan"); kembali salah; } hasil const = list.map((i) => ({ judul: nama i, nilai: nama i })); const { nilai } = menunggu perintahnya({ ketik: "pilih", nama: "nilai", pesan: "silakan pilih perangkat Anda", pilihan: hasil, }); NamaPerangkat saat ini = nilai; kembalikan NamaPerangkat saat ini; };Setelah
melintasi node cadangan
dan memilih perangkat, masukkan informasi node traversal dan jalankan file salin ke jalur yang ditentukan ( atribut output
dalam file konfigurasi)
const MIB = () => { // Dapatkan file konfigurasi const { backups, output } = getConfig(); // Tentukan apakah node cadangan kosong jika (backups.length === 0) { log("Node cadangan saat ini kosong", "peringatkan"); log("Silakan tambahkan node cadangan di file konfigurasi", "peringatkan"); } if (panjang cadangan > 0) { isPath(keluaran); // Parsing folder terakhir dari jalur pencadangan backups.forEach((item: SaveItemType) => { log(`Saat ini sedang menjalankan tugas pencadangan:${item.comment}`); const arr = item.path.split("/").filter((i: string) => i !== ""); const nama folder = arr.at(-1); const backupDir = pathRepair(item.path); // Direktori cadangan // Tentukan apakah ada direktori cadangan di node // Sambungkan jalur ekspor const rootPath = pathRepair(pathRepair(output) + nama folder); const outputDir = item.output ?item.output && jalurPerbaikan(item.output) : jalur akar; // Tentukan apakah jalur cadangan ada if (!isPathAdb(backupDir)) { log(`Jalur cadangan:${backupDir} tidak ada dan telah dilewati`, "error"); } kalau tidak { // Tentukan jalur ekspor isPath(outputDir); cadangan(backupDir, outputDir, item.penuh); } }); } log("Program berakhir"); }; // Sempurnakan file yang perlu dicadangkan dan masukkan ke dalam antrian pencadangan const backup = (target: string, output: string, full: boolean = false) => { jika (!penuh) { // Cadangkan data file non-cadangan // Dapatkan informasi file di ponsel dan bandingkan dengan const lokal { backupQueue } = initData(target, output); // Hitung volume dan kuantitas computeBackupSize(backupQueue); //Jalankan program cadangan (backupQueue, output); } kalau tidak { // Tidak ada perbandingan file, pencadangan langsung moveFolder(target, output); } }; //Memindahkan file dalam antrian file yang akan dicadangkan const move = (backupQueue: FileNodeType[], outputDir: string): void => { if (backupQueue.length === 0) { log("Tidak diperlukan cadangan"); kembali; } untuk (const fileN dari backupQueue) { log(`Mencadangkan ${fileN.fileName}`); mencoba { keluar: string = execAdb( `tarik "${fileN.filePath}" "${outputDir + fileN.fileName}"`, ); kecepatan konstan: string |. null = out.match(speedReg) !== null ? out.match(speedReg)![0] : "Gagal membaca kecepatan"; log(`Kecepatan transmisi rata-rata${kecepatan}`); } tangkapan (e: apa saja) { log(`Cadangan ${fileN.fileName} kesalahan gagal:${e.message}`, "kesalahan"); } } };
USB
untuk membuat cadangan datamasukkan perintah berikut di terminal untuk menginstal mib
secara global.
file skrip konfigurasi
npm i @qc2168/mib -g
untuk pertama kalinya, Anda perlu membuat file .mibrc
baru di direktori pengguna dan mengatur konten parameter yang sesuai.
{ "cadangan": [ { "jalur": "/sdcard/MIUI/sound_recorder/call_rec", "komentar": "Rekaman panggilan" }, { "jalur": "/sdcard/DCIM/Kamera", "komentar": "Album foto lokal" }, { "jalur": "/sdcard/DCIM/Kreatif", "komentar": "Kreasi saya" }, { "jalur": "/sdcard/Gambar/weixin", "komentar": "Album foto WeChat" }, { "jalur": "/sdcard/tencent/qq_images", "komentar": "album foto QQ" }, { "jalur": "/sdcard/Gambar/zhihu", "komentar": "Zhihu" }, { "jalur": "/sdcard/tieba", "komentar": "Tieba" }, { "jalur": "/sdcard/DCIM/Tangkapan Layar", "komentar": "Tangkapan Layar" }, { "jalur": "/sdcard/DCIM/perekam layar", "komentar": "Rekaman layar" }, { "jalur": "/sdcard/MIUI/sound_recorder", "komentar": "rekaman" }, { "jalur": "/sdcard/MIUI/sound_recorder/app_rec", "komentar": "Perekaman Aplikasi" } ], "keluaran": "E:/backup/MI10PRO" }
Untuk melakukan backup
di konsol, langsung masukkan mib
untuk memicu skrip tanpa parameter lain.
mib
akan menampilkan informasi terkait berdasarkan file konfigurasi.
09-04-2022 20:58:11 info Tugas pencadangan saat ini: Perekaman layar 09-04-2022 20:58:11 info Jumlah cadangan 1 09-04-2022 20:58:11 info 24Mb data diperoleh 09-04-2022 20:58:11 info ukuran cadangan 24Mb 09-04-2022 20:58:11 info Mencadangkan Perekam Layar-2022-04-08-19-45-51-836.mp4 09-04-2022 20:58:12 info kecepatan transfer rata-rata 27,7 MB/s 09-04-2022 20:58:12 info Tugas pencadangan saat ini: perekaman 09-04-2022 20:58:12 info Jumlah cadangan 0 09-04-2022 20:58:12 info ukuran cadangan 0Mb 09-04-2022 20:58:12 info Tidak diperlukan cadangan 09-04-2022 20:58:13 info Program berakhir
Alamat asli: https://juejin.cn/post/7084889987631710221
Penulis: _island