rsync詳解之exclude排除文件


rsync詳解之exclude排除文件

在使用rsync工具進行數據同步時,需要排除掉一些目錄或者文件該如何做呢?其實很簡單,rsync提供了一個--exclude的選項,只需要在命令行排除掉這些內容即可。

例:將遠程源服務器/home/ 目錄同步到本地/home 目錄,但需要將源服務器/home/testuser這個目錄排除掉。

my-host:~ # rsync -avP --delete --exclude 'testuser' root@192.168.57.178:/home/ /home

 

注意:
1、這個路徑必須是一個相對路徑,不能是絕對路徑。不可寫為 --exclude '/testuser'。
2、系統會把文件和文件夾一視同仁,如果testuser是一個文件,同樣不會復制。
3、如果想避開復制testuser里面的內容,可以這么寫--exclude 'testuser/file1',
4、可以使用通配符 避開不想復制的內容

比如--exclude “fire*”

那么fire打頭的文件或者文件夾全部不會被復制

 

從某個文件中讀取要排除的內容

如果想要避開復制的文件過多,可以這么寫

--exclude-from=/exclude.list


exclude.list 是一個文件,保存要排除的目錄或文件,放置的位置是絕對路徑的/exclude.list ,為了避免出問題,最好設置為絕對路徑。


里面的內容一定要寫為相對路徑

如,我想同步/home目錄,要排除幾百個子目錄

my-host:~ # rsync -avP --delete --exclude-from='/exclude.list' root@192.168.57.178:/home/ /home
my-host:~ # head /exclude.list
ftpboot/biget/book/catalogdata/*
ftpboot/biget/catalogtree/*
ftpboot/baidusearch/book/meta/*
ftpboot/mreadsearch/book/meta/*
ftpboot/mreadMobile/book/meta/*
ftpboot/searchengine/book/*
略……

 

寫為--exclude-from或者--exclude-from=都可以

 我這里是想同步目錄忽略目錄下的內容所以 exclude.list 用了類似這種結構 ftpboot/biget/book/catalogdata/*

rsync+ssh非交互登錄同步數據

前面的方法在同步開始前需要輸入源主機用戶密碼,在傳輸少量文件時沒有問題,但有時同步的數據量比較大,也許需要好幾天,總不能開這遠程窗口等待執行完成吧。或者我們需要配置定時任務進行同步,這時ssh登錄交互的方式不太適合。
有兩種方法可以解決此問題。
一、配置兩台主機ssh免密互信
二、使用sshpass免交互的ssh登錄工具

1、在本機上安裝sshpass,centos的用戶直接通過下面的命令安裝:

yum install sshpass

 


或者在 https://sourceforge.net/projects/sshpass/files/latest/download 下載源碼,通過編譯的方式安裝:

tar zxvf sshpass-1.06.tar.gz
cd sshpass-1.06
./configure
make install

 


 2、在本機上通過rsync傳送遠程主機文件到本機,運行下面的命令:

sshpass -p '123456' rsync -avP --delete --exclude-from='/exclude.list' -e 'ssh -p 19222' root@192.168.57.178:/home/ /home

 

sshpass man 手冊中還列舉了兩個示例

 

EXAMPLES
Run rsync over SSH using password authentication, passing the password on the command line:   

rsync --rsh='sshpass -p 12345 ssh -l test' host.example.com:path

 

To do the same from a bourne shell script in a marginally less exposed way:

SSHPASS=12345 rsync --rsh='sshpass -e ssh -l test' host.example.com:path

 

 

其中:

-p: 后面接遠程主機的登錄密碼

'ssh -p 19222' :表示通過ssh連接,ssh服務使用的19222端口

實現了免密登錄,就可以將同步命令放到后台,然后關掉窗口放心地做其他事了,也不用擔心登錄shell斷開導致同步失敗。

nohup sshpass -p 'passwd' rsync -avP --delete --exclude-from='/exclude.list' -e 'ssh -p 19222' root@192.168.57.178:/home/ /home &

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM