当前位置:首页 > linux教程 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2014-02-28 12:41:01 浏览: 评论:0 

以下脚本把所有要编辑的源文件备份到/bak目录下,并且所有的路径位置保持不变,比如vi /etc/hosts,则把/etc/hosts复制到/bak/etc/hosts。

  1. # cat /sh/vii 
  2. #!/usr/bin/bash 
  3. #判断源文件是否存在,存在才执行备份操作 
  4. if [ -f "$1" ];then 
  5. #创建函数,可实现任意键继续 
  6. #如果你的机器上不认stty raw那么把函数中两处出现的raw换成cbreak 
  7. get_char() 
  8. SAVEDSTTY=`stty -g` 
  9. stty -echo 
  10. stty raw 
  11. dd if=/dev/tty bs=1 count=1 2> /dev/null 
  12. stty -raw 
  13. stty echo 
  14. stty $SAVEDSTTY 
  15. #创建备份的根路径/bak,并让所有人具有写权限 
  16. if [ ! -d "/bak" ];then 
  17. mkdir /bak 
  18. chmod a+w /bak 
  19. fi 
  20. #判断目标文件所处的路径并创建,让所有人对新创建的任一级目录均具有写权限 
  21. echo $1 | grep "/" >/dev/null 
  22. if [ "`echo $?`" = "0" ];then 
  23. cd ${1%/*} 
  24. fi 
  25. pwdnow=`pwd` 
  26. path=/bak${pwdnow} 
  27. #echo $path 
  28. if [ ! -d "$path" ];then 
  29. mkdir -p $path 
  30. patha=${pwdnow#/} 
  31. chmod -R a+w /bak/${patha%%/*} 
  32. fi 
  33. #复制目标文件 
  34. datenow=`date +%Y%m%d` 
  35. timenow=`date +%H%M%S` 
  36. /usr/bin/cp $1 ${path}/${1##*/}.${datenow}.${timenow} 
  37. echo "Target file "$1
  38. has been copied to ${path}/${1##*/}.${datenow}.${timenow}" 
  39. echo "Now going to "vi $1",Press any key to continue..." 
  40. char=`get_char` 
  41. fi 
  42. #调用vi命令 
  43. vi $1 
  44. 调用脚本 
  45. chmod a+x /sh/vii 
  46. # /sh/vii /etc/passwd 

你可以把/sh加入到PATH变量中,这样就更方便了,同理,涉及cp/mv命令时最好也备份一下目标文件,以免被意外覆盖。

Tags: Shell 脚本 实现 自动备份

分享到: