当前位置:首页 > 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. { 
  9. SAVEDSTTY=`stty -g` 
  10. stty -echo 
  11. stty raw 
  12. dd if=/dev/tty bs=1 count=1 2> /dev/null 
  13. stty -raw 
  14. stty echo 
  15. stty $SAVEDSTTY 
  16. } 
  17. #创建备份的根路径/bak,并让所有人具有写权限 
  18. if [ ! -d "/bak" ];then 
  19. mkdir /bak 
  20. chmod a+w /bak 
  21. fi 
  22. #判断目标文件所处的路径并创建,让所有人对新创建的任一级目录均具有写权限 
  23. echo $1 | grep "/" >/dev/null 
  24. if [ "`echo $?`" = "0" ];then 
  25. cd ${1%/*} 
  26. fi 
  27. pwdnow=`pwd` 
  28. path=/bak${pwdnow} 
  29. #echo $path 
  30. if [ ! -d "$path" ];then 
  31. mkdir -p $path 
  32. patha=${pwdnow#/} 
  33. chmod -R a+w /bak/${patha%%/*} 
  34. fi 
  35. #复制目标文件 
  36. datenow=`date +%Y%m%d` 
  37. timenow=`date +%H%M%S` 
  38. /usr/bin/cp $1 ${path}/${1##*/}.${datenow}.${timenow} 
  39. echo "Target file "$1" 
  40. has been copied to ${path}/${1##*/}.${datenow}.${timenow}" 
  41. echo "Now going to "vi $1",Press any key to continue..." 
  42. char=`get_char` 
  43. fi 
  44. #调用vi命令 
  45. vi $1 
  46. 调用脚本 
  47. # chmod a+x /sh/vii 
  48. # /sh/vii /etc/passwd 

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

Tags: Shell 脚本 实现 自动备份

分享到: