
テクノロジーの発展により、私たちが日常生活で撮影する写真やビデオの鮮明さは向上し続けていますが、これには大きな欠点もあります。それは、サイズもますます大きくなっているということです。私が初めてスマートフォンを使い始めたとき、写真は2-5MBしかありませんでしたが、今では写真は15-20MB 、あるいはそれ以上に大きくなりました。

携帯電話のストレージ容量は限られています。これらの写真やビデオをバックアップして、携帯電話の容量を増やすにはどうすればよいでしょうか?
そこで、当初はこれらのデータをすべてフォトアルバムクラウドに保存していましたが、保存の問題は解決しましたが、アップロードサイズの制約やバックグラウンドを常に占有する必要があるなどの新たな問題も発生しました。消費電力の増加を宣伝します。
その後、単純に使用をやめてデータをバックアップするスクリプトを書いたので、この記事が出てきました。
Node.jsとadb使用してこのスクリプトを作成し、 MIB
この小さなツールは、携帯電話上でadbデバッグを使用し、 shellコマンドを使用して携帯電話上でファイル情報を読み取り、コピーおよび移動します。
簡単なMIBを描いてみました
ノードの終わりまで。

必要な環境をインストールし
、さまざまなデバイス操作を実行するために使用されるadbパッケージをダウンロードします。Node.js
Node fs-extra)
Node.jsすでに持っていると思います。
fsモジュールの二次カプセル化に基づくprompts : コマンド ラインでの対話用のNodeライブラリwinston : スクリプト ログを記録するためのNodeライブラリプロジェクトのソース コードは少し多すぎるため、ここではメイン コード部分のみを載せます
。
友人は
githubにアクセスしてプロジェクトのソース コードを確認できます。github.com/QC2168/mib は
設定ファイルを読み取ります。export
const getConfig = (): ConfigType => {
if (existConf()) {
readJsonSync(CONFIG_PATH) を返します。
}
// 設定ファイルが見つかりません return createDefaultConfig();
スクリプトを実行するときに、
バックアップする必要があるデバイスIDを選択します。そして、 adbコマンド実行時にデバイスを指定します
(async() => {
const デバイス: 文字列 = 待機 selectDevice();
if (デバイス) MIB();
})();
import const selectDevice = async ():Promise<string|false> => {
// デバイスの取得 const list: devicesType[] = devices();
if (list.length === 0) {
log("現在接続されているデバイスはありません。ツールを実行する前に接続してください", "警告");
false を返します。
}
const result = list.map((i) => ({ title: i.name, value: i.name }));
const { value } = プロンプトを待ちます({
タイプ:「選択」、
名前: "値"、
メッセージ: "デバイスを選択してください",
選択肢: 結果、
});
現在のデバイス名 = 値;
現在のデバイス名を返します。
バックアップ ノードをトラバースして
デバイスを選択した後、トラバーサル ノード情報を入力し、指定されたパス (構成ファイルのoutput属性) にファイルをコピーします
。
const MIB = () => {
// 設定ファイルを取得します const {backups,output} = getConfig();
// バックアップ ノードが空かどうかを判断します if (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(item.output)
: ルートパス;
// バックアップ パスが存在するかどうかを判断します if (!isPathAdb(backupDir)) {
log(`バックアップ パス:${backupDir} が存在しないためスキップされました`, "エラー");
} それ以外 {
// エクスポート パスを決定します isPath(outputDir);
バックアップ(バックアップディレクトリ、出力ディレクトリ、アイテム.フル);
}
});
}
log("プログラムが終了");
};
// バックアップする必要があるファイルを絞り込み、バックアップ キューに入力します const backup = (target: string, Output: string, full: boolean = false) => {
if (!full) {
// バックアップ以外のファイルデータをバックアップします // 携帯電話内のファイル情報を取得し、ローカルのファイル情報と比較します const {backupQueue } = initData(target,output);
// ボリュームと数量を計算します。 computeBackupSize(backupQueue);
//バックアッププログラムを実行 move(backupQueue,output);
} それ以外 {
// ファイル比較なし、直接バックアップ moveFolder(target, Output);
}
};
//ファイルキュー内のファイルをバックアップ対象に移動 const move = (backupQueue: FileNodeType[], OutputDir: string): void => {
if (backupQueue.length === 0) {
log("バックアップは必要ありません");
戻る;
}
for (backupQueue の const fileN) {
log(`${fileN.fileName}`をバックアップしています`);
試す {
const out: string = execAdb(
`pull "${fileN.filePath}" "${outputDir + fileN.fileName}"`,
);
const 速度: 文字列 | null = out.match(speedReg) !== null ? out.match(speedReg)![0] : "速度の読み取りに失敗しました";
log(`平均通信速度${speed}`);
} キャッチ (e: 任意) {
log(`バックアップ ${fileN.fileName} が失敗しました。エラー:${e.message}`, "エラー");
}
}
関数
USB接続でデータをバックアップターミナルに次のコマンドを入力してmibグローバルにインストールします。
npm i @qc2168/mib -g
構成スクリプト ファイルを
初めて使用する場合は、ユーザー ディレクトリに新しい.mibrcファイルを作成し、対応するパラメーターの内容を設定する必要があります。
{
「バックアップ」: [
{
"パス": "/sdcard/MIUI/sound_recorder/call_rec",
"コメント": "通話録音"
}、
{
"パス": "/sdcard/DCIM/カメラ",
"コメント": "地元の写真アルバム"
}、
{
"パス": "/sdcard/DCIM/クリエイティブ",
"コメント": "私の作品"
}、
{
"パス": "/sdcard/Pictures/weixin",
"コメント": "WeChatフォトアルバム"
}、
{
"パス": "/sdcard/tencent/qq_images",
"コメント": "QQフォトアルバム"
}、
{
"パス": "/sdcard/Pictures/zhihu",
"コメント": "志胡"
}、
{
"パス": "/sdcard/tieba",
"コメント": "ティエバ"
}、
{
"パス": "/sdcard/DCIM/スクリーンショット",
"コメント": "スクリーンショット"
}、
{
"パス": "/sdcard/DCIM/スクリーンレコーダー",
"コメント": "画面録画"
}、
{
"パス": "/sdcard/MIUI/sound_recorder",
"コメント": "録音"
}、
{
"パス": "/sdcard/MIUI/sound_recorder/app_rec",
"コメント": "アプリの録画"
}
]、
"出力": "E:/backups/MI10PRO"
コンソールmib
バックアップを実行するには
、他のパラメータを指定せずに mib を直接入力してスクリプトをトリガーします。
mib
コンソールは、設定ファイルに基づいて対応する情報を出力します。
2022-04-09 20:58:11 info 現在のバックアップ タスク: 画面録画2022-04-09 20:58:11 info バックアップ数量 1 2022-04-09 20:58:11 情報 24Mb のデータを取得しました 2022-04-09 20:58:11 情報バックアップ サイズ 24MB 2022-04-09 20:58:11 情報 Screenrecorder-2022-04-08-19-45-51-836.mp4 をバックアップしています 2022-04-09 20:58:12 情報 平均転送速度 27.7 MB/秒 2022-04-09 20:58:12 info 現在のバックアップ タスク: 記録 2022-04-09 20:58:12 info バックアップ数量 0 2022-04-09 20:58:12 情報バックアップ サイズ 0Mb 2022-04-09 20:58:12 info バックアップは必要ありません 2022-04-09 20:58:13 info プログラムは終了します
元のアドレス: https://juejin.cn/post/7084889987631710221
著者: _island