ディレクトリを tar で圧縮する


0. Contents

1. Concept
2. Script Source
3. How to Use


1. Concept

元々はタイトル通りの処理をする為に作ったサブルーチンだが
色々と手を加えてあり、いくつかのオプションを指定する事ができる。


2. Script Source

ソースは以下の通り (ダウンロード)。

#! /usr/bin/env bash

function cdt(){
## 変数をセット
  local {G,C,V}Opt {B,S,O}Path Ext
  declare -i OPTIND=1 {F,S}Flag=0
  VOpt='-v' COpt='-z' BPath=$PWD Ext='tgz'

## 引数をチェック
  while getopts 'a:fns' GOpt ; do
    case "$GOpt" in
      a)
        case "$OPTARG" in
          t|tar) Ext='tar' COpt='' ;;

          b|tbz) Ext='tbz' COpt='-j' ;;

          z|tgz) Ext='tgz' COpt='-z' ;;

          *)
            echo "error: $FUNCNAME: -$GOpt $OPTARG: Invalid argument." 1>&2
            return 1
          ;;
        esac
      ;;

      f) FFlag=1 ;;

      s) SFlag=1 ;;

      n) VOpt='' ;;

      \?)
        echo "error: $FUNCNAME: Invalid option." 1>&2
        return 1
      ;;
    esac
  done
  shift $[ OPTIND - 1 ]
  (( $# > 0 )) || {
    echo "error: $FUNCNAME: No argument." 1>&2
    return 1
  }

## 関数の定義
  ## メイン関数
  function cdt_main(){
  ## ディレクトリのチェック
    builtin cd "$BPath"
    [[ -d "$SPath" ]] || {
      echo "error: $FUNCNAME: $SPath: Not directory." 1>&2
      return 1
    }

  ## パスのチェック
    SPath=${SPath%/}
    [[ -z "${SPath##*/*}" ]] && {
      builtin cd "${SPath%/*}" || return
      SPath=${SPath##*/}
    }

  ## 保存ファイルの重複チェック
    OPath="${SPath}.${Ext}"
    if (( FFlag == 1 )) ; then
      rm -f "$OPath" || return

    elif [[ -e "$OPath" ]] ; then
      echo "error: $FUNCNAME: $PWD/$OPath: Already exists." 1>&2
      return 1
    fi

  ## 圧縮処理を実行
    tar -c $COpt $VOpt -f "$OPath" "$SPath" || return
    (( SFlag == 1 )) || rm -rf "$SPath"
  }

## メインルーチン
  for SPath in "$@" ; do
    [[ -n "$VOpt" ]] && echo
    cdt_main && echo "$FUNCNAME: $OPath: done."
  done
}
cdt "$@"


3. How to Use

USAGE、OPTION は以下の通り。

USAGE: cdt (Options) [Diretory]...

  -a [Type]
     : set archive type
         t, tar : tar
         b, tbz : bzip2
         z, tgz : gzip (default)

  -f : force make archive

  -n : no verbose messages

  -s : save original files