- 论坛徽章:
- 1
|
本帖最后由 jeppeter 于 2016-10-20 08:48 编辑
实现功能:
方便在.git管理的代码与远程smbmount上来的目录进行方便的copy in / copy out,可以做到目录结构copy ,能够利用bash auto-completion进行,并且自动实现 dos2unix
有三个文件构成
分别是cpfuncs
cpin
cpout
这三个文件要放在同一目录
cpfuncs
- #! /bin/sh
- CP=/bin/cp
- SED=/bin/sed
- FIND=/usr/bin/find
- XARGS=/usr/bin/xargs
- MKDIR=/bin/mkdir
- SUDO_PREFIX=/usr/bin/sudo
- ECHO=/bin/echo
- READLINK=/bin/readlink
- GREP=/bin/grep
- WC=/usr/bin/wc
- PWD=/bin/pwd
- TAIL=/usr/bin/tail
- MOUNT=/bin/mount
- UMOUNT=/bin/umount
- AWK=/usr/bin/awk
- SPLITAWK_STR='{curidx=1;curitem="";printout=0;curcon=$0;n=split($0,a);for(i=1;i<=NF;i++){spaces="";idx=index(curcon,a[i]);if(idx>1){spaces=substr(curcon,1,idx-1);curcon=substr(curcon,length(spaces)+1);}curcon=substr(curcon,length(a[i])+1);if(length(a[i])==0){if(length(curitem)>0){curitem=sprintf("%s%s",curitem,spaces);}continue;}if(a[i]==splitchar){if(curidx==searchidx){printf("%s\n",curitem);printout=1;break;}curitem="";curidx+=1;continue;}if(length(curitem)>0){curitem=sprintf("%s%s%s",curitem,spaces,a[i]);}else{curitem=$i;}}if(printout==0&&curidx==searchidx){printf("%s\n",curitem);printout=1;}}'
- EQUALAWK_STR='{if($0==searchvar){print$0}}'
- GetSmbMountDir()
- {
- if [ -n "$CP_SMB_DIR" ]
- then
- # if we have CP_SMB_DIR
- # so we do this
- ${ECHO} "$CP_SMB_DIR"
- return
- fi
- _mountdir=`${MOUNT} | ${GREP} -e '^//' | ${AWK} -v splitchar=on -v searchidx=2 "$SPLITAWK_STR" | ${AWK} -v splitchar=type -v searchidx=1 "$SPLITAWK_STR" | ${TAIL} -1`
- ${ECHO} "$_mountdir"
- return
- }
- GetGitDir()
- {
- _curdir=`${PWD}`
- while [ True ]
- do
- if [ -z "$_curdir" ] || [ "$_curdir" = "/" ]
- then
- ${ECHO} "/"
- return
- fi
- if [ -d "$_curdir/.git" ]
- then
- ${ECHO} "$_curdir"
- return
- fi
- _curdir=`dirname $_curdir`
- done
- }
- IsSub()
- {
- _base1="$1"
- _cur1="$2"
- _base=`${READLINK} -f "$_base1"`
- _cur=`${READLINK} -f "$_cur1"`
- _base="$_base/"
- _cur="$_cur/"
- _issub=`${ECHO} -n "$_cur" | ${GREP} -E "^$_base" | ${WC} -c`
- if [ $_issub -gt 0 ]
- then
- ${ECHO} "1"
- return
- fi
- ${ECHO} "0"
- return
- }
- GetSubDir()
- {
- _base1="$1"
- _cur1="$2"
- _base=`${READLINK} -f "$_base1"`
- _cur=`${READLINK} -f "$_cur1"`
- _base="$_base/"
- _cur="$_cur/"
- _subdir=`${ECHO} -n "$_cur" | ${SED} 's|^'"$_base"'||' | ${SED} 's|/$||'`
- ${ECHO} "$_subdir"
- return
- }
复制代码
cpin
cpout
使用方法,
你只要进入.git 管理的目录,并且在同一台机器上有SMBMOUNT上来的目录就可以了,如果有多个,你最好用环境变量CP_SMB_DIR来确定是哪一个。
举例:
如果你在/home/user/source/working/这个.git项目中,并且你的远程smbmount的目录在/mnt/smbmount上
在working目录下的任一目录调用
那将自动
- cp /home/user/source/working/cfile/cfiles.c /mnt/smbmount/working/cfile/cfiles.c
复制代码
如果在远程没有这个中间目录,会自动创建。
则会调用
- cp /mnt/smbmount/working/cfile/cfiles.c /home/user/source/working/cfile/cfiles.c
复制代码
对于目录也同样适用
|
|