免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1052 | 回复: 0

在Shell中执行vi/cp/mv时自动备份源文件 [复制链接]

论坛徽章:
0
发表于 2009-04-20 15:30 |显示全部楼层


以下脚本把所有要编辑的源文件备份到/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命令时最好也备份一下目标文件,以免被意外覆盖。
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/15067/showart_1904502.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP