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
|