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 はこちらからダウンロード可能です。
|