title: 526.文件备份的几个简单命令 outline: deep

我们知道,备份文件是一件很重要的事情,我在《优秀程序员的十个习惯》一文向大家说明了备份文件应该是程序员最基本的一个习惯。本文主要是向大家介绍一些在备份文件和数据时能用得到的一些示例,当然,这些示例主要是通过一些命令行或是脚本来实现的。这就是用命令行和脚本的优势,你可以实现比较灵活和自动的定制。

本文中的脚本和示例都是主要是通过zip, tar, ftp, wget和shell脚本来完成。在Linux下,你可以什么也不用安装任何程序,但在Windows下,你需要安装zip 和wget这三个命令(在本文的最后有这三个命令的链接,你可以去下载)

几个小脚本

1)首先,我们来看一下,如何给某目录打个zip包。

Windows:

zip -r backup.zip "c:\yourfolder"

Linux: (打包自己的home目录)

tar -czvf ~/backup.tgz --exclude backup.tgz ~/

2)接下来,我们再来看一下,创建一个带有时间文件名的压缩包,并上传到远程主机的一个例子。

 Windows

  :: cmd 脚本   :: 压缩包文件格式`backup-mm-dd-yyyy.zip'   :: 注意:%dir% 被引号括起是怕目录名中有空格

  @echo off

  set host=ftp.yourhost.com   set user=username   set pass=password   set file=backup-%date:4,2%-%date:7,2%-%date:~10%.zip   set dir="yourfolder"

  zip -r %file% %dir%

  ›  script.ftp echo open %host%   ›› script.ftp echo %user%   ›› script.ftp echo %pass%   ›› script.ftp echo bin   ›› script.ftp echo put %file%   ›› script.ftp echo bye

  ftp.exe -d -s:script.ftp › backup.log

  del script.ftp

Linux

  #!/bin/bash

  host="ftp.yoursite.com"   user="username"   pass="password"   file="backup-$(date '+%m-%d-%Y').tgz"   dir="$HOME"

  tar -cvzf $file $dir

  ftp -vin ‹ftp.log   open $host   user $user $pass   bin   put $file   close   bye   EOF

3)最后,我们来看一看,通过wget命令来下载备份好的压缩包。

Windows

  :: cmd 脚本   :: 注意: '^' 是一个命令的换行符

  set host="ftp://ftp.your.host.com"   set user="flintstone"   set pass="yabbadabbadoo"

  wget %host% --ftp-user=%user% --ftp-password=%pass% ^        --mirror --output-file=backup.log --passive-ftp

Linux

  #!/bin/sh   # 注意 '\' 是命令的换行符      host="ftp://ftp.your.host.com"   user="username"   pass="password"

  wget $host --ftp-user=$user --ftp-password=$pass \   --mirror --output-file=backup.log --passive-ftp

相关工具

几点注意

上面的那几个命令比较简单,只是表明一些备份的脚本思路。在实际过程当中,基本上也是这样,下面是几点注意。

1)给备份文件打包压缩这是第一步,你可以选用其它的压缩程序。如bzip。
2)文件名上有时间信息比较容易归档。有时候,文件包比较大,还需要对大文件进行分割(一般的压缩软件都支持文件分割)。
3)使用wget和ftp可能会有用户名密码泄露的问题,使用ssh拷贝文件会比较好。
4)源代码最好还是使用版本控制工具备份(比如Subversion或CVS)
5)备份脚本可以放在计划任务(linux是corn)中以实际自动化。
6)以上的方法一般说来比较适用于全部备份,而不是增量备份。