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

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

実践TypeScript【電子書籍】[ 吉井健文 ]
価格:3726円 (2019/7/23時点)

[

楽天で購入

](https://hb.afl.rakuten.co.jp/hgc/18648e8b.7d833591.18648e8c.ed1bab3c/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Frakutenkobo-ebooks%2F5456816fd8833397a6aa8b80647873ad%2F%3Fscid%3Daf_pc_bbtn&m=http%3A%2F%2Fm.rakuten.co.jp%2Frakutenkobo-ebooks%2Fi%2F18341447%2F%3Fscid%3Daf_pc_bbtn&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxfQ==)

速攻でメモできる QuickNote リリースしました!

QuickNoteは動作が超軽量でサクサクかけるノートアプリです。一瞬の閃きを逃さずにノートを開き書き始めることができます。 アカウント登録も不要です。お試しあれ!

Excel操作をコマンドで! proBoarderExcel

Excelはマウスで操作するのが基本ですが、マウス操作に疲れてはいませんか? キーボードでExcel操作ができるようになるアプリです。オープンソースで無料です。

積み上げ! Daily Stack リリースしました!

Daily Stack は日々の積み上げを管理するToDoアプリです。過去の積み上げの振り返りだけでなく、ツイート機能もあります。 アカウント登録不要ですぐに使い始めることができます。

ExecNote.app リリースしました!

ExecNoteは、コードが実行できるMarkdownアプリケーションです。Markdownドキュメント内に記載したコードをクリックすると実行ができます。わざわざターミナルを 起動させる必要がありません!無料ですのでもしよければダウンロードをお願いします。

About Me

11年目のシステムエンジニアです。アプリで生活や仕事を改善したい🐱仕事効率化、自動化のアプリ開発が得意です、ご相談ください。 🚀エンタメ系アプリの開発も模索中🐬社内SEや個人アプリ開発者、システムエンジニアになりたい人と繋がりたい🐱