Typescript でファイルやフォルダを圧縮する方法

typescript で ファイルやフォルダを tar, gzip, tgz, zip 形式に圧縮する方法を紹介します。
なお、gzip形式でのフォルダ圧縮はできません。

1. Compressing モジュールのインストール

compressing というモジュールを使用します。

https://www.npmjs.com/package/compressing


npm install compressing

でインストールできます。

2. 圧縮を行う _compress クラス

すこし長いですが、各関数を1つのクラスにまとめています。


// comp.ts
import * as compressing from "compressing";
export interface ICompress {
    file2zip(filepath: string, destpath: string): any;
    file2gzip(filepath: string, destpath: string): any;
    file2tar(filepath: string, destpath: string): any;
    file2tgz(filepath: string, destpath: string): any;
    dir2zip(inputdir: string, destpath: string): any;
    dir2tar(inputdir: string, destpath: string): any;
    dir2tgz(inputdir: string, destpath: string): any;
}
export default class _compress implements ICompress{
    file2zip(filepath: string, destpath: string) {
        compressing.zip.compressFile(filepath, destpath)
        .then( () => {
            return 0
        })
        .catch( (e) => {
            return e
        })
    }
    file2gzip(filepath: string, destpath: string) {
        compressing.gzip.compressFile(filepath, destpath)
        .then( () => {
            return 0
        })
        .catch( (e) => {
            return e
        })
    };
    file2tar(filepath: string, destpath: string) {
        compressing.tar.compressFile(filepath, destpath)
        .then( () => {
            return 0
        })
        .catch( (e) => {
            return e
        })
    };
    file2tgz(filepath: string, destpath: string) {
        compressing.tgz.compressFile(filepath, destpath)
        .then( () => {
            return 0
        })
        .catch( (e) => {
            return e
        })
    };
    dir2zip(inputdir: string, destpath: string) {
        compressing.zip.compressDir(inputdir, destpath)
        .then( () => {
            return 0
        })
        .catch( (e) => {
            return e
        })
    }
    dir2tar(inputdir: string, destpath: string) {
        compressing.tar.compressDir(inputdir, destpath)
        .then( () => {
            return 0
        })
        .catch( (e) => {
            return e
        })
    }
    dir2tgz(inputdir: string, destpath: string) {
        compressing.tgz.compressDir(inputdir, destpath)
        .then( () => {
            return 0
        })
        .catch( (e) => {
            return e
        })
    }
}

3. 関数の説明

1. file2zip 関数

  • 処理内容:ファイルをzip形式に圧縮します。
  • 引数: filepath 圧縮するファイルパス, destpath zipファイル出力先ファイルパス
  • 返り値: 正常終了の場合は 0、異常終了の場合はエラー内容を返します。

2. file2gzip 関数

  • 処理内容:ファイルをgzip形式に圧縮します。
  • 引数: filepath 圧縮するファイルパス, destpath gzipファイル出力先ファイルパス
  • 返り値: 正常終了の場合は 0、異常終了の場合はエラー内容を返します。

3. file2tar 関数

  • 処理内容:ファイルをtar形式に圧縮します。
  • 引数: filepath 圧縮するファイルパス, destpath tarファイル出力先ファイルパス
  • 返り値: 正常終了の場合は 0、異常終了の場合はエラー内容を返します。

4. file2tgz 関数

  • 処理内容:ファイルをtgz形式に圧縮します。
  • 引数: filepath 圧縮するファイルパス, destpath tgzファイル出力先ファイルパス
  • 返り値: 正常終了の場合は 0、異常終了の場合はエラー内容を返します。

5. dir2zip 関数

  • 処理内容:ディレクトリをzip形式に圧縮します。
  • 引数: inputdir 圧縮するディレクトリ, destpath zipファイル出力先ファイルパス
  • 返り値: 正常終了の場合は 0、異常終了の場合はエラー内容を返します。

6. dir2tar 関数

  • 処理内容:ディレクトリをtar形式に圧縮します。
  • 引数: inputdir 圧縮するディレクトリ, destpath tarファイル出力先ファイルパス
  • 返り値: 正常終了の場合は 0、異常終了の場合はエラー内容を返します。

7. dir2tgz 関数

  • 処理内容:ディレクトリをtgz形式に圧縮します。
  • 引数: inputdir 圧縮するディレクトリ, destpath tgzファイル出力先ファイルパス
  • 返り値: 正常終了の場合は 0、異常終了の場合はエラー内容を返します。

4. 使い方


import _compress from "./comp";
// ---
const compress = new _compress;
const inputFilePath:string = "./sample.txt"
const zipFilePath:string = "./sample.zip"
const gzipFilePath:string = "./sample.gzip"
const tarFilePath:string = "./sample.tar"
const tgzFilePath:string = "./sample.tgz"
const inputDir:string = "./sample"
const zipFilePath2:string = "./sampledir.zip"
const tarFilePath2:string = "./sampledir.tar"
const tgzFilePath2:string = "./sampledir.tgz"
// ---
compress.file2zip(inputFilePath, zipFilePath);
compress.file2gzip(inputFilePath, gzipFilePath);
compress.file2tar(inputFilePath, tarFilePath);
compress.file2tgz(inputFilePath, tgzFilePath);
compress.dir2zip(inputDir, zipFilePath2);
compress.dir2tar(inputDir, tarFilePath2);
compress.dir2tgz(inputDir, tgzFilePath2);

クラスをimoprt して、new でインスタンスを生成している感じです。
あとは、関数を呼び出します。

5. ダウンロード

comp.ts はこちらからダウンロード可能です。

comp.ts

返信を残す

メールアドレスが公開されることはありません。