【Shell】実行時に指定した引数で、tar.gz形式またはzip形式でディレクトリを圧縮する

■実装するプログラムの概要

実行時に指定した引数を基に、tar.gz形式またはzip形式で同階層に配置しているworkディレクトリを圧縮する。

※階層構造については、後述の「■ディレクトリ構造」参照。

■フローチャート

■プログラム仕様

インプット処理内容アウトプット
実行ファイル名を変数にセットする。
第1引数実行時の第1引数を変数にセットする。
【ディレクトリ】
work
【条件分岐】
実行時の第1引数について、
0の場合:
 tar.gz形式でディレクトリを圧縮する。
1の場合:
 zip形式でディレクトリを圧縮する。
0、1以外の場合:
 エラーメッセージを出力する。
【圧縮ファイル】
sample.tar.gz
sample.zip

【メッセージ】
エラーメッセージ

■ディレクトリ構造

赤字の「sample.tar.gz」および「sample.zip」は実行モジュール「sample.sh」を実行した後に作成される。

■サンプルコード

#!/bin/bash

# 実行ファイル名をセット(パスは削除)
readonly MODULE_NAME=${0##*/}

# 第1引数を変数にセット
compression_flg=$1

# 圧縮フラグ判定処理
#   0:tar.gz形式に圧縮
#   1:zip形式に圧縮
#   0、1以外:エラーメッセージ出力
case "$compression_flg" in
    "0")
        printf '%s\n' "${MODULE_NAME}:tar.gz形式で圧縮します。"
        tar -zcvf sample.tar.gz ./work
        ;;
    "1")
        printf '%s\n' "${MODULE_NAME}:zip形式で圧縮します。"
        zip -r sample.zip ./work
        ;;
    *)
        printf '%s\n' "${MODULE_NAME}:引数は0か1を指定してください。"
        printf '%s\n' "指定した引数:${compression_flg}"
        ;;
esac

■実行結果

・tar.gz形式で圧縮

$ ./sample.sh  0
sample.sh:tar.gz形式で圧縮します。
a ./work
a ./work/samplefile1.txt
a ./work/samplefile2.txt
a ./work/samplefile3.txt

・zip形式で圧縮

$ ./sample.sh  1
sample.sh:zip形式で圧縮します。
  adding: work/ (stored 0%)
  adding: work/samplefile1.txt (stored 0%)
  adding: work/samplefile2.txt (stored 0%)
  adding: work/samplefile3.txt (stored 0%)

・エラーメッセージ出力(実行時の第1引数:0、1以外)

$ ./sample.sh  3
sample.sh:引数は0か1を指定してください。
指定した引数:3
タイトルとURLをコピーしました