Com o desenvolvimento da tecnologia, a clareza das fotos e vídeos que tiramos no nosso dia a dia continua a melhorar, mas isso também tem uma grande desvantagem, ou seja, o seu tamanho também está cada vez maior. Ainda me lembro de quando comecei a usar smartphones, uma foto tinha apenas 2-5MB
, mas agora uma foto atingiu 15-20MB
, ou até maior.
O espaço de armazenamento em nossos celulares é limitado. Como fazemos backup dessas fotos e vídeos para liberar espaço em nossos celulares?
Então, no início, armazenei todos esses dados em uma nuvem de álbum de fotos. Embora o problema de armazenamento desses dados tenha sido resolvido, novos problemas também surgiram, como restrições de tamanho de upload e a necessidade de ocupar o fundo o tempo todo, o que levou. ao aumento do consumo de energia, anunciar.
Mais tarde, simplesmente parei de usá-lo e escrevi um script para fazer backup dos dados, então este artigo foi publicado.
Usei Node.js
e adb
para fazer este script e o chamei MIB
Esta pequena ferramenta é implementada usando depuração adb
no telefone celular, lendo e copiando informações do arquivo e movendo arquivos no telefone móvel por meio de comandos shell
.
Desenhei um MIB
simples
até o final do nó.
instale o ambiente necessário
e baixe adb
, que é usado para realizar diversas operações de
download Node.js
Acredito que todos os irmãos já possuem a biblioteca de dependência de instalação fs-extra em seus computadores
:
fs-extra
biblioteca Node
com base no encapsulamento secundário fs
prompts
do módulo fs: Biblioteca Node
para interação na linha de comandowinston
: Biblioteca Node
para gravação de logs descript
. amigos podem ir ao
github
para ver o código fonte do projeto github.com/ QC2168/mib
lê o arquivo de configuração
export const getConfig = (): ConfigType => { if (existConf()) { retornar readJsonSync(CONFIG_PATH); } // O arquivo de configuração não pode ser encontrado return createDefaultConfig(); };
Ao executar o script, selecione o ID
do dispositivo cujo backup precisa ser feito. E especifique o dispositivo ao executar o comando adb
(async () => { dispositivo const: string | boolean = aguarda selectDevice(); if (dispositivo) MIB(); })(); exportar const selectDevice = async ():Promise<string|false> => { // Obtém lista const de dispositivos: devicesType[] = devices(); if (lista.comprimento === 0) { log("Nenhum dispositivo está conectado no momento, conecte-se antes de executar a ferramenta", "avisar"); retornar falso; } resultado const = list.map((i) => ({ título: i.name, valor: i.name })); const { valor } = aguardar prompts ({ digite: "selecionar", nome: "valor", mensagem: "selecione seu dispositivo", escolhas: resultado, }); nomeDispositivoAtual = valor; retornar nome do dispositivo atual; };Após
percorrer o nó de backup
e selecionar o dispositivo, insira as informações do nó transversal e execute a cópia do arquivo para o caminho especificado (atributo output
no arquivo de configuração)
const MIB = () => { // Obtém o arquivo de configuração const { backups, output } = getConfig(); // Determine se o nó de backup está vazio if (backups.length === 0) { log("O nó de backup atual está vazio", "warn"); log("Por favor, adicione nós de backup no arquivo de configuração", "warn"); } if (backups. comprimento > 0) { isPath(saída); // Analisar a última pasta do caminho de backup backups.forEach((item: SaveItemType) => { log(`Em execução na tarefa de backup:${item.comment}`); const arr = item.path.split("/").filter((i: string) => i !== ""); const nomedapasta = arr.at(-1); const backupDir = pathRepair(item.caminho); // Diretório de backup // Determine se existe um diretório de backup no nó // Divida o caminho de exportação const rootPath = pathRepair(pathRepair(output) + folderName); const saídaDir = item.saída ?item.saída && pathRepair(item.saída) : caminhoraiz; // Determina se o caminho de backup existe if (!isPathAdb(backupDir)) { log(`Caminho de backup:${backupDir} não existe e foi ignorado`, "erro"); } outro { // Determina o caminho de exportação isPath(outputDir); backup(backupDir, outputDir, item.full); } }); } log("Programa termina"); }; // Refine os arquivos que precisam ser copiados e insira-os na fila de backup const backup = (target: string, output: string, full: boolean = false) => { if (! completo) { // Faça backup dos dados do arquivo que não é de backup // Obtenha as informações do arquivo no celular e compare-as com o local const { backupQueue } = initData(target, output); // Calcula o volume e a quantidade computaBackupSize(backupQueue); //Executa o programa de backup move(backupQueue, output); } outro { // Sem comparação de arquivos, backup direto moveFolder(target, output); } }; //Mover arquivos na fila de arquivos para backup const move = (backupQueue: FileNodeType[], outputDir: string): void => { if (backupQueue.length === 0) { log("Não é necessário fazer backup"); retornar; } for (const fileN de backupQueue) { log(`Fazendo backup de ${fileN.fileName}`); tentar { saída const: string = execAdb( `pull "${fileN.filePath}" "${outputDir + fileN.fileName}"`, ); velocidade const: string | null = out.match(speedReg) !== null ? out.match(speedReg)![0] : "Falha ao ler a velocidade"; log(`Velocidade média de transmissão${velocidade}`); } pegar (e: qualquer) { log(`Falha no backup ${fileN.fileName} erro:${e.message}`, "erro"); } } };
USB
para backup de dadosinsira o seguinte comando no terminal para instalar mib
globalmente.
arquivo de script de configuração
npm i @qc2168/mib -g
pela primeira vez, você precisa criar um novo arquivo .mibrc
no diretório do usuário e definir o conteúdo do parâmetro correspondente.
{ "backups": [ { "caminho": "/sdcard/MIUI/sound_recorder/call_rec", "comment": "Gravação de chamada" }, { "caminho": "/sdcard/DCIM/Câmera", "comment": "Álbum de fotos local" }, { "caminho": "/sdcard/DCIM/Creative", "comment": "Minha criação" }, { "caminho": "/sdcard/Imagens/weixin", "comment": "Álbum de fotos do WeChat" }, { "caminho": "/sdcard/tencent/qq_images", "comment": "Álbum de fotos QQ" }, { "caminho": "/sdcard/Imagens/zhihu", "comentário": "Zhihu" }, { "caminho": "/sdcard/tieba", "comentário": "Tieba" }, { "caminho": "/sdcard/DCIM/Capturas de tela", "comentário": "Captura de tela" }, { "caminho": "/sdcard/DCIM/screenrecorder", "comment": "Gravação de tela" }, { "caminho": "/sdcard/MIUI/sound_recorder", "comentário": "gravação" }, { "caminho": "/sdcard/MIUI/sound_recorder/app_rec", "comment": "Gravação de aplicativo" } ], "saída": "E:/backups/MI10PRO" }
Para realizar o backup
no console, insira diretamente mib
para acionar o script sem outros parâmetros.
mib
produzirá informações correspondentes com base no arquivo de configuração.
2022-04-09 20:58:11 info Tarefa de backup atual: Gravação de tela2022-04-09 20:58:11 info Quantidade de backup 1 2022-04-09 20:58:11 informações 24Mb de dados obtidos 2022-04-09 20:58:11 tamanho do backup de informações 24 MB 2022-04-09 20:58:11 informações Fazendo backup do Screenrecorder-2022-04-08-19-45-51-836.mp4 2022-04-09 20:58:12 informações velocidade média de transferência 27,7 MB/s 2022-04-09 20:58:12 info Tarefa de backup atual: gravação 2022-04-09 20:58:12 info Quantidade de backup 0 2022-04-09 20:58:12 tamanho do backup de informações 0Mb 2022-04-09 20:58:12 info Nenhum backup necessário 2022-04-09 20:58:13 info O programa termina
Endereço original: https://juejin.cn/post/7084889987631710221
Autor: _island