rsync詳解之exclude排除文件

rsync詳解之exclude排除文件nginx

問題:如何避開同步指定的文件夾?  --exclude
rsync  --exclude files and foldersshell

http://articles.slicehost.com/2007/10/10/rsync-exclude-files-and-foldersbash

很常見的狀況:我想同步/下的 /usr   /boot/ ,  可是不想複製/proc  /tmp 這些文件夾服務器

若是想避開某個路徑  直接添加--exclude 便可網絡

好比--exclude 「proc」ssh

--exclude ‘sources’ide

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

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


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

[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.

•Previous Entry: nginx 天天定時切割Nginx日誌的腳本 •Next Entry: 如何開啓MySQL的遠程賬號

相關文章
相關標籤/搜索