这里教大家如何用find、xargs和tar命令完成上面的功能。
成都创新互联公司是一家集成都网站设计、成都做网站、网站页面设计、网站优化SEO优化为一体的专业的建站公司,已为成都等多地近百家企业提供网站建设服务。追求良好的浏览体验,以探求精品塑造与理念升华,设计最适合用户的网站页面。 合作只是第一步,服务才是根本,我们始终坚持讲诚信,负责任的原则,为您进行细心、贴心、认真的服务,与众多客户在蓬勃发展的市场环境中,互促共生。
建立一个测试环境,新建几个文件
# cd /tmp
# mkdir test
# cd test
# touch a.php b.js c.css 1.png
# ls
1.png a.php b.js c.css
接下来,通过find命令找出指定后缀的文件,为了支持多个后缀文件,find命令用到了正则匹配
# find . -type f -regex ".*\.\(php\|js\|css\)"
./b.js
./a.php
./c.css
-regex后面的参数看起来很复杂,其实很简单,我来做个解释,双引号就不需要解释了吧
.*\.\(php\|js\|css\) 简化一下就是.*.(php|js|css),其实就是对.()|做了下转义而已,开头的.*匹配除换行符外的任意字符(这个懂正则表达式的应该都明白)
找出文件后,就是如何备份这些文件了,tar需要指定源文件,怎么获取find出来的这些文件,并传给tar呢,xargs的作用就来了。看到下面xargs输出的是什么了吧,这个正是tar需要的。
# find . -type f -regex ".*\.\(php\|js\|css\)" | xargs
./b.js ./a.php ./c.css
# find . -type f -regex ".*\.\(php\|js\|css\)" | xargs tar czvf test.tar.gz
./b.js
./a.php
./c.css
下面看看文件是否备份成功了
# tar tzvf test.tar.gz
-rw-r--r-- root/root 0 2014-03-14 10:38 ./b.js
-rw-r--r-- root/root 0 2014-03-14 10:37 ./a.php
-rw-r--r-- root/root 0 2014-03-14 10:38 ./c.css
应该用cp -rf 源目录 备份目录
cp是复制命令
-r 递归处理,指定目录下的文件和子目录一并处理
-f 强行复制,无论目标是否存在
1、可使用dd命令备份到磁带或者文件中
2、通过rsync命令远程同步所有目录到其他服务器的共享目录中。rsync -a / 网络共享服务器IP:/目录即可,用法可自行查找,很简单。
用tar会有各种各样难避免的问题,建议直接用启动盘启动系统后利用DD命令来整盘复制。
比如,举个最简单的例子,你只有两分区(以及各自挂载点) /dev/hda1(/) 和/dev/hda2(swap),而且你linux是在/dev/hda1(/)中,于是,你可以另接一硬盘(假设/dev/hdb1)用启动盘重启后,执行命令:
mount /dev/hdb1 /mnt/hdb1 -t ext2 #挂载到目录,没目录自已建,不用多解释了
dd if=/dev/hda1 of=/mnt/hdb1/sysimage.bak
dd if=/dev/hda of=/mnt/hdb1/mbr.bak bs=1 count=512 #备份MBR和分区表,若分区表不备份就把512改446
等吧。。分区越大时间越久,dd没有ghost这些软件聪明。哪怕你的linux只有1M但你的分区有1G,那备份时间就是复制1G的文件的时间
到另一台机子后,以同样的方法,恢复。假设光盘无坏道且是空的。
dd if=mbr.bak的路径 of=/dev/hda count=512 bs=1 #跟之前的硬盘的分区一样
dd if=sysimage.bak的路径 of=/dev/hda1 #恢复系统
差不多就是这样。自已用虚拟机多练习下吧。毕竟具体问题要具体分析和使用。