linux shell 编程如何实现两个文件的同步。

作者&投稿:中叔童 (若有异议请与网页底部的电邮联系)
linux shell 编程如何实现两个文件的同步。~

Linux系统下实现文件同步的shell脚本,代码如下: #!/bin/bashmount /dev/hda6 /mnt/d 2>/dev/null ; unalias rm cprm /share/c/app/*o /share/c/tmp/*o /share/c/app/*core /share/c/tmp/*core /share/c/app/aout /share/c/tmp/aoutfind /shalinux shell 编程如何实现两个文件的同步。

如果你的网站主要是基于数据库的,所有的网页变化都在数据库里面体现,文件一般不变动,就象论坛或者博客一样,那么你的问题可以通过数据库同步来实现。最简单的同步方式是两个服务器共享存储空间,比如使用相同的网络硬盘最为网站服务器使用,这种方法是永远同步的。比如你的局域网里面有三台机器,一台链接网通宽带提供对外WEB服务,一台链接电信宽带对外提供WEB服务,另外一台不链接外网,安装大硬盘并共享出来,另外两台服务器都设置网站主目录为共享机器上的硬盘。

ln
这是linux中一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同不的链接,这
个命令最常用的参数是-s,具体用法是:ln -s 源文件 目标文件。
当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。例
如:ln -s /bin/less /usr/local/bin/less
-s 是代号(symbolic)的意思。
这里有两点要注意:
第一,ln命令会保持每一处链接文件的同步性,也就是说,不论你改动了哪一处,其它的文件都会发生相同的变化;
第二,ln的链接又软链接和硬链接两种,软链接就是ln -s ** **,它只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间,硬链接ln ** **,没有参数-s, 它会在你选定的位置上生成一个和源文件大小相同的文件,无论是软链接还是硬链接,文件都保持同步变化。
第三,软链接是可以跨分区的,但是硬链接只能在同一分区内。
如果你用ls察看一个目录时,发现有的文件或文件夹的颜色和别的不一样,我机子上是蓝色的,那就是一个用ln命令生成的文件,用ls -l命令去察看,就可以看到显示的link的路径了。

如果用rsync命令,你必须手动执行rsync命令才能同步,不能做到及时更新

Linux系统下实现文件同步的shell脚本,代码如下:

#!/bin/bash
mount /dev/hda6 /mnt/d 2>/dev/null ; unalias rm cp
rm /share/c/app/*o /share/c/tmp/*o /share/c/app/*core /share/c/tmp/*core /share/c/app/a.out /share/c/tmp/a.out
find /share -print >/tmp/.share_ 
#把/share的所有文件的全名保存到/tmp/.share_
find /mnt/d/share -print |sed 's///mnt//d//g' >/tmp/.d_
chmod 700 /tmp/.share_ /tmp/.d_
count=0
for i in $(comm -23 /tmp/.d_ /tmp/.share_) ; do 
#比较两个文件里/tmp.d_ 与/tmp./share_的不同。
echo "/mnt/d$i"
rm "/mnt/d$i" ; count=$((count+1)) 
#删除/mnt/d/share/*里的多余的文件和计数。
done #for command ;do command ; done的循环到此结束。
echo "del $count file at /mnt/d/share/"
find /mnt/d/share -print |sed 's///mnt//d//g' >/tmp/.d_ ; count=0 
#重新获得文件的全名。初始化计数器。
for i in $(comm -23 /tmp/.share_ /tmp/.d_) ; do
echo $i
cp $i "/mnt/d$i" ; count=$((count+1)) 
#备份/share里新增加的文件到/mnt/d/share,同时计数。
done
echo "already copied $count file from /share to /mnt/d/share " ;sync
umount /mnt/d 2>/dev/null
echo done


给个我自己的方向给你,如果你AB2个文件夹都相同的话
DIRA=`ls -l A | awk '{print $6}' | sort` //看A目录下文件时间,并排序,把内容赋值到变量DIRA
DIRB=`ls -l B | awk '{print $6}' | sort` //看A目录下文件时间,并排序,把内容赋值到变量DIRB
diff $DIRA $DIRB | grep “<" //对比2个文件。
.......
然后进行处理,需要弄一个shell程序,然后放在crontab里面执行。
具体你自己琢磨。

没有其它特殊需求的话,下面这一行命令就能完成你的工作
rsync -avz /yourpath/A /yourpath/B
有空可以man rsync一下

man rsync 看看它的帮助


中宁县18489471129: 怎样用LINUX Shell 编程?
养类五苓: 第一个文件:xinming.cinclude "xinming.h"int main(){ print1(); print2();}第二个文件:xinming1.cvoid print1(void){ printf("My name is...."); }第三个文件:xinming2.cvoid print2(void){ printf("hell!\n";}第四个文件:xinming.hinclude <stdio.h>include "xinming1.c"include "xinming2.c"编译命令:gcc xinming.c -o xinming生成xinming.exe用./xinming执行

中宁县18489471129: Linux如何编写shell脚本?
养类五苓: 一般以 #!/bin/sh 开头(不是必须要写,但一定要单独一行),指定执行这个脚本的shell程序(也可以用#!/bin/zsh或其他),然后就是堆命令了.Linux的shell脚本支持很多功能,加上Linux高度模块化的命令,完全可以用shell脚本写出复杂的程序. 以上只是简单介绍如何开始写shell脚本,如果要写复杂的脚本,还需要深入学习相关知识(如if——fi、case——esac等结构). 当然,还需要给脚本加上可执行权限(chmod +x ./file.sh),否则可以用 sh ./file.sh 方式执行脚本(这里的sh是执行脚本所需shell,命令也可以是zsh ./file.sh或其他).

中宁县18489471129: 怎样用linux shell 编程? -
养类五苓: shell多了,ksh,bash,csh等等 例如用bash: #!/bin/bash echo 'hello world' exit 0 随便找个文本编辑器,保存代码,例如存为test 然后命令行下: $ chmod +x test $ ./test

中宁县18489471129: 在linux中,如何编写一个shell脚本来实现如下功能? -
养类五苓: #!/usr/bin/expect set timeout 10spawn ssh pcs@11.17.1.2expect "*Password*"send "密码\r"expect ">"send "ls;cd back/rate/;run.sh\r"expect eof

中宁县18489471129: 怎么在Linux下进行Shell编程 -
养类五苓: 使用VI写一个shell脚本文件,再对文件加个执行的权限就好了

中宁县18489471129: linux中如何编写shell脚本? -
养类五苓: 用VIM在终端中 vim shell.sh 回车然后写脚本,.保存然后./shell.sh运行或者bash空格shell.sh 运行...

中宁县18489471129: 怎么执行linux shell编程 -
养类五苓: 如果你指的是如何运行的话,直接“./shell程序”就可以了

中宁县18489471129: linux 怎么编写一个shell程序并执行 -
养类五苓: #!/bin/bash 或者#!/bin/shif [ -e /etc/apache2/httpd.conf ];then /etc/init.d/httpd startfi这是最简单的一个脚本,可以添加相关的代码来完善功能..需要root的权限才能执行...换行空格什么的要注意,,在这里写出来 提交后换行可能会没了.

中宁县18489471129: Linux下如何实现shell多线程编程 -
养类五苓: 程序代码test.c共两个线程,一个主线程,一个读缓存区的线程:#include <pthread.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h> char globe_buffer[100]; void *read_buffer_thread(void *arg); //这里先声明一下读缓...

中宁县18489471129: linux shell 编程 -
养类五苓: (1)编写shell程序fileback:#!/bin/sh DIRNAME=`ls /root | grep bak` if [ -z "$DIRNAME" ] ; then mkdir /root/bak cd /root/bak fi YY=`date +%y` MM=`date +%m` DD=`date +%d` BACKETC=$YY$MM$DD_etc.tar.gz tar zcvf $BACKETC /etc echo "...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网