
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 fsprompts 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
githubpara 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