rsync 排除指定目錄或文件進行同步


rsync 排除指定目錄或文件進行同步

 
很常見的情況:我想同步/myweb下的 一些php文件 ,  但是不想復制/myweb/log/里邊的一些日志文件,因為這些文件太大了,備份也是沒有意義的。 現在如果想避開某個路徑  直接添加—exclude 即可 比如—exclude “./log” –exclude ‘./log/file’

Note: the directory path is relative to the folder you are backing up.

rsync備份時排除指定目錄或文件

要排除指定目錄,可以在客戶端命令行中使用–exclude-from命令


例如
rsync -vzrtopg –progress –delete –exclude-from=/home/pcfile user@11.22.33.44 /back/xxx

pcfile文件中,每條記錄占一行,支持通配符
/tmp         ## 排除名為 tmp 的根目錄
.[a-z]*     ## 不備份以點開頭的隱藏文件

注意:這個路徑必須是一個相對路徑,不能是絕對路徑

 

例子:源服務器/home/yjwan/bashshell有一個checkout文件夾

[root@CentOS5-4 bashshell]# ls -dl checkout

drwxr-xr-x 2 root root 4096 Aug 21 09:14 checkou

現在想要完全避開復制這個文件夾內容怎么辦?

目標服務器執行

rsync -av –exclude “checkout” yjwan@172.16.251.241:/home/yjwan/bashshell /tmp

將不會復制這個文件夾

[root@free /tmp/bashshell]# ls -d /tmp/bashshell/checkout

ls: /tmp/bashshell/checkout: No such file or directory

 

注意:

 

1事實上,系統會把文件和文件夾一視同仁,如果checkout是一個文件,一樣不會復制

 

2 如果想避開復制checkout里面的內容,可以這么寫—exclude “checkout/123”

 

3 切記不可寫為—exclude “/checkout”這樣絕對路徑

這樣寫 將不會避免checkout被復制

比如

[root@free /tmp/bashshell]# rsync -av –exclude “/checkout” yjwan@172.16.251.241:/home/yjwan/bashshell /tmp

receiving file list … done

bashshell/checkout/

 

4可以使用通配符避開不想復制的內容

比如—exclude “fire*”

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

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

–exclude-from=/exclude.list

 

exclude.list 是一個文件,放置的位置是絕對路徑的/exclude.list ,為了避免出問題,最好設置為絕對路徑。

 

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

 

比如我想避開checkout文件夾和fire打頭的文件

 

那么/exclude.list 寫為

checkout

fire*

然后執行以下命令,注意寫為–exclude-from或者–exclude-from=都可以

但是不能為—exclude

rsync -av –exclude-from=”/exclude.list” yjwan@172.16.251.241:/home/yjwan/bashshell /tmp

檢查結果:確實避開了checkout文件夾和fire打頭的文件

問題:如何計算對比復制以后的文件數量是否正確呢?

1 查看錯誤日志,看是否復制時候出問題了

2在源服務器執行可知道具體文件和文件夾的總個數

ls –AlR|grep “^[-d]”|wc

然后目標服務器在計算一遍個數

看看數字是不是能對的上就ok了

對不上再研究怎么回事

3現在的問題是:如果我使用了—exclude參數就麻煩了

我怎么知道要復制幾個文件?

首先,前面命令時候提到過一種寫法,就是只有源地址,沒有目標地址的寫法,這種寫法可以用來列出所有應該被復制的文件

那么用這個命令,可以計算出這個/root/bashshell下面文件和文件夾數量

在服務器端執行

[root@CentOS5-4 bashshell]# rsync -av /root/bashshell/ |grep “^[-d]” | wc

62     310    4249

和ls 得到的結果一致的

[root@CentOS5-4 bashshell]# ls -AlR |grep “^[-d]“|wc

62     558    3731

因此,比如說我不要fire 打頭的文件,可以在服務器端先這樣計算要復制的文件

[root@CentOS5-4 bashshell]# rsync -av –exclude “fire*” /root/bashshell/ |grep “^[-d]” | wc

44     220    2695

然后復制過去

看目標機器的文件和文件夾數量為

[root@free /tmp]# ls -AlR /tmp/bashshell/  |grep “^[-d]“|wc

44     396    2554

可以知道2者是同步的

問題:Rsync的其他幾個常見參數

1

-z        –compress              compress file data during the transfer

–compress-level=NUM    explicitly set compression level

–skip-compress=LIST    skip compressing files with suffix in LIST

壓縮傳輸,如果網絡帶寬不夠,那么應該壓縮以后傳輸,消耗的當然是機器資源,但是如果內網傳輸的話,文件數量不是很多的話,這個參數不必要的。

2

-password-file=FILE

前面說過了,只有遠端機器是rsync服務器,才能用這個參數

如果你以為個FILE寫的是ssh 登陸的密碼,那就大錯特錯了,不少人犯了這個錯誤。

 

3

–stats: Adds a little more output regarding the file transfer status.

4

–progress: shows the progress of each file transfer. Can be useful to know if you have large files being backup up.

關於這個參數:

I frequently find myself adding the -P option for large transfers. It preserves partial transfers in case of interuption, and gives a progress report on each file as it’s being uploaded.

I move large media files back and forth on my servers, so knowing how long the transfer has remaining is very useful.

 


免責聲明!

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



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