首页 电脑 电脑学堂 查看内容

Shell脚本 实现vi cp mv前自动备份源文件

2011-7-1 12:08 715 0

摘要:   以下脚本把所有要编辑的源文件备份到/bak目录下,并且所有的路径位置保持不变,比如vii /etc/hosts,则把/etc/hosts复制到/bak/etc/hosts。  # cat /sh/...
关键词: echo stty path 备份 bak 路径 源文件 目标 timenow datenow

  以下脚本把所有要编辑的源文件备份到/bak目录下,并且所有的路径位置保持不变,比如vii /etc/hosts,则把/etc/hosts复制到/bak/etc/hosts。  # cat /sh/vii  #!/usr/bin/bash  #判断源文件是否存在,存在才执行备份操作  if [ -f "$1" ];then  #创建函数,可实现任意键继续  #如果你的机器上不认stty raw那么把函数中两处出现的raw换成cbreak  get_char()  {  SAVEDSTTY=`stty -g`  stty -echo  stty raw  dd if=/dev/tty bs=1 count=1 2> /dev/null  stty -raw  stty echo  stty $SAVEDSTTY  }  #创建备份的根路径/bak,并让所有人具有写权限  if [ ! -d "/bak" ];then  mkdir /bak  chmod a+w /bak  fi  #判断目标文件所处的路径并创建,让所有人对新创建的任一级目录均具有写权限  echo $1 | grep "/" >/dev/null  if [ "`echo $?`" = "0" ];then  cd ${1%/*}  fi  pwdnow=`pwd`  path=/bak${pwdnow}  #echo $path  if [ ! -d "$path" ];then  mkdir -p $path  patha=${pwdnow#/}  chmod -R a+w /bak/${patha%%/*}  fi  #复制目标文件  datenow=`date +%Y%m%d`  timenow=`date +%H%M%S`  /usr/bin/cp $1 ${path}/${1##*/}.${datenow}.${timenow}  echo "Target file \"$1\"  has been copIEd to ${path}/${1##*/}.${datenow}.${timenow}"  echo "Now going to \"vi $1\",Press any key to continue…"  char=`get_char`  fi  #调用vi命令  vi $1  调用脚本  # chmod a+x /sh/vii  # /sh/vii /etc/passwd  你可以把/sh加入到PATH变量中,这样就更方便了。  同理,涉及cp/mv命令时最好也备份一下目标文件,以免被意外覆盖。
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部