歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> SHELL編程

自動備份腳本 Linux shell 第二版

腳本比上一版新增了(http://www.linuxidc.com/Linux/2012-11/73781.htm),記錄時間戳功能。可以將你實時修改的文件進行備份。適合一些個人照片,文檔,代碼的備份;

./backup_file  目錄下 應該有一個 list_file 目錄用來存儲文件列表和文件時間戳。

$1 為你需要備份的目錄  。    $2  為備份到的目錄

$1 不能為空, 後續會繼續修改一些bug, 並進一步完善腳本,

若你發現那一段代碼存在bug ,可以告知博主。或者你有更好的實現方法,也可以一起探討。

還有現在這個腳本,目前還不能備份子目錄,只能備份文件。 以後發布將會加上這個對子目錄備份的功能。

  1. #!/bin/sh
  2. # name backup file
  3. # author acanoe
  4. # timedate 2012_11_9 13:50
  5. # versions 0.1
  6. judge_your_input()
  7. {
  8. if [ -z $1 ] ; then
  9. echo "please input your updatedir!"
  10. echo ""
  11. echo "example:"
  12. echo "./back_file /backdir /updatedir"
  13. echo "like this example"
  14. echo ""
  15. exit
  16. fi
  17. if [ -z $2 ] ; then
  18. echo "please input your backdir!"
  19. echo ""
  20. echo "example:"
  21. echo "./back_file /backdir /updatedir"
  22. echo "like this example"
  23. echo ""
  24. exit
  25. fi
  26. }
  27. clear_record()
  28. {
  29. if [ -e ./list_file/old_time_ioc ] ; then
  30. rm ./list_file/old_time_ioc
  31. fi
  32. if [ ! -e ./list_file/new_time_ioc ] ; then
  33. echo "create a new_time_ioc"
  34. touch ./list_file/new_time_ioc
  35. fi
  36. if [ -e ./list_file/new_time_ioc ] ; then
  37. mv ./list_file/new_time_ioc ./list_file/old_time_ioc
  38. else
  39. touch ./list_file/old_time_ioc
  40. fi
  41. }
  42. find_change_file()
  43. {
  44. ls $1 > ./list_file/update_file_list
  45. ls $2 > ./list_file/back_file_list
  46. while read line
  47. do
  48. R=$(echo $line)
  49. echo "$R `stat $1/$R | sed -n '7p'`" >> ./list_file/new_time_ioc
  50. if [ ! -e ./list_file/new_time_ioc ] ; then
  51. echo "create a new_time_ioc"
  52. touch ./list_file/new_time_ioc
  53. fi
  54. done < ./list_file/update_file_list
  55. # while read line
  56. # do
  57. # R=$(echo $line)
  58. # echo "$R `stat $2/$R | sed -n '7p'`" >> ./list_file/old_time_ioc
  59. # echo "$R"
  60. # done < ./list_file/back_file_list
  61. diff ./list_file/new_time_ioc ./list_file/old_time_ioc > ./list_file/diff_file
  62. sed -n '/</p' ./list_file/diff_file > ./list_file/file
  63. sed -e 's/< //g' ./list_file/file > ./list_file/the_file
  64. sed -e 's/< //g' ./list_file/file > ./list_file/the_file
  65. }
  66. back_back_file()
  67. {
  68. while read line
  69. do
  70. R=$(echo $line | sed -e 's/ .*//g')
  71. echo $R
  72. cp $1/$R $2
  73. done < ./list_file/the_file
  74. }
  75. find_not_exist()
  76. {
  77. ls $1 > ./list_file/file_list
  78. ls $2 > ./list_file/back_list
  79. diff ./list_file/file_list ./list_file/back_list > ./list_file/diff_file
  80. sed -n '/</p' ./list_file/diff_file > ./list_file/file
  81. sed -e 's/< //g' ./list_file/file > ./list_file/the_file
  82. while read line
  83. do
  84. R=$(echo $line)
  85. echo $R
  86. cp -rf $1/$R $2
  87. done < ./list_file/the_file
  88. }
  89. judge_your_input $1 $2
  90. clear_record
  91. find_change_file $1 $2
  92. back_back_file $1 $2
  93. find_not_exist $1 $2
Copyright © Linux教程網 All Rights Reserved