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 |