本文爲命令rsync的man文檔翻譯,幾乎全部的選項都翻譯了,另外關於篩選規則部分只翻譯了一部分。因爲原文不少地方都比較囉嗦,因此譯文中有些內容可能容易讓國人疑惑,因此我我的在某些地方加上了註釋。如有錯誤之處,盼請指出。html
本人譯做集合:http://www.cnblogs.com/f-ck-need-u/p/7048359.htmlios
如下是rsync系列篇:git
1.rsync(一):基本命令和用法web
2.rsync(二):inotify+rsync詳細說明和sersync正則表達式
3.rsync算法原理和工做流程分析算法
4.rsync技術報告(翻譯)shell
5.rsync工做機制(翻譯)數據庫
rsync(1) rsync(1)
名稱
rsync - 一個快速、多功能的遠程(和本地)文件拷貝工具
摘要
Local: rsync [OPTION...] SRC... [DEST]
Access via remote shell:
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
Access via rsync daemon:
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
當僅有一個SRC或DEST參數時將列出源文件列表而不是複製文件。
描述
Rsync是一個快速且功能很是豐富的文件拷貝工具。它能夠在本地和遠程之間經過shell或rsync
服務互相拷貝文件。它提供了大量的選項來控制它各方面功能的行爲,且在指定待拷貝文件方
面很是有彈性。它以其增量拷貝算法而出名,只拷貝源和目標不一樣的文件部分,所以減小網絡
間要傳輸的數據。Rsync天天都被普遍用於作備份、鏡像和看成升級版拷貝命令。
Rsync使用"quick check"算法(默認)決定文件是否須要被傳輸,它會找出大小或最後修改時間
(mtime)不一樣的文件。當"quick check"算法代表了文件不須要被更新時,任何其餘保留屬性(譯
者注:除大小和最後修改時間外的屬性)都將直接在目標文件上修改。
rsync的其餘特性包括:
o 支持拷貝連接文件、設備文件、全部權(即全部者和所屬組)、屬組以及權限
o 支持相似於GNU tar命令的exclude和exclude-from選項
o 支持CVS排除模式以忽略相同的文件(譯者注:CVS是一種版本控制系統)
o 可使用任意透明的遠程shell(remote shell),包括ssh或rsh
o 不要求超級管理員權限
o 以pipeline管道模型傳輸文件以便最小化下降成本
o 支持匿名或可身份認證的rsync daemon模式(作鏡像的理想方式)
通常特性
Rsync在本地或遠程主機之間拷貝文件(但不支持兩個遠程之間互相拷貝)。
rsync有兩種不一樣的方式聯繫遠程主機:使用遠程shell程序做爲傳輸方式(如ssh或rsh)或直接通
過TCP聯繫rsync守護進程。當命令行中指定的源或目標主機後使用了單個冒號(:)時將使用遠程
shell傳輸模式。當在命令行中指定的源或目標主機後使用雙冒號(::)或使用了rsync://這種URL
時將表示使用TCP聯繫rsync守護進程,但rsync://方式有一個例外,請參見下文"經過遠程SHELL
鏈接使用RSYNC-DAEMON特性"段落的內容。
但有一個特殊狀況,若是隻給定了源地址沒有給定目標地址,則將以相似於"ls -l"的格式輸出文
件列表。
若給定的源地址和目標地址都不是遠程地址,則在本機進行拷貝(見選項--list-only)。
Rsync命令中,本地端老是扮演"client"角色,遠程端老是扮演"server"角色。不要混淆"server"
和rsync daemon,rsync daemon必定是一個"server",可是"server"多是一個rsync daemon也可
能是遠程shell派生出來的進程。
安裝
請閱讀README文件來查看安裝說明。
當安裝完成後,你能夠經過遠程shell(也能夠經過rsync daemon協議)讓rsync與任意你能訪問的主
機進行交流。對於遠程傳輸,現代rsync使用ssh與其餘主機進行交流,可是能夠配置其餘默認的遠
程shell,如rsh或remsh。
你也能夠經過命令行的"-e"選項或設置RSYNC_RSH環境變量來指定你想要使用的遠程shell。
rsync必須同時裝在源主機和目標主機上。
用法
rsync的使用方法和rcp同樣。你必須指定源地址和目標地址,其中一個多是遠程地址。
也許解釋語法最好的方式是經過幾個示例:
rsync -t *.c foo:src/
這將會把當前目錄下全部能匹配*.c的文件傳輸到主機foo上的src目錄下。若是遠程主機上已經存在
某些同名文件,rsync的遠程更新(rsync-update)協議將會更新哪些有差別的文件。更詳細的內容見
技術報告。
rsync -avz foo:src/bar /data/tmp
這將會以遞歸方式把遠程主機foo上的src/bar目錄下的全部文件傳輸到本地主機的/data/tmp目錄下。
這些文件以歸檔(archive)模式傳輸,它保證在傳輸過程當中保留符號連接、設備文件、屬性、權限、
全部者、所屬組等。另外,在傳輸過程當中會使用壓縮功能以減小要傳輸的數據體積。
rsync -avz foo:src/bar/ /data/tmp
使用尾隨斜線(/)改變了本來的行爲,它避免了在目標地址建立一個額外的目錄層次。帶有尾隨斜線
時,你能夠理解爲"拷貝目錄的內容"而不是拷貝"拷貝目錄名"(譯者注:即拷貝目錄自己),可是這兩
種狀況都會將目錄中包含的文件傳輸到目標目錄下。換句話說,下面兩條命令都以相同的方式進行拷
貝,包括/dest/foo的屬性設置。
rsync -av /src/foo /dest
rsync -av /src/foo/ /dest/foo
還須要注意的是,拷貝主機或引用模塊的默認目錄不須要尾隨斜線。例如,下面的命令都拷貝遠程
(默認)目錄的內容到本地的"/dest"。
rsync -av host: /dest
rsync -av host::module /dest
你也能夠僅使用rsync的僅本地(local-only)模式,此模式下的源地址和目標地址名稱中都不須要冒號
(:)。它行爲相似於cp命令的升級版。
最後,你能夠經過移除模塊名參數部分的方式列出rsync daemon中全部可用模塊。
rsync somehost.mydomain.com::
更詳細信息見下面段落。
高級用法
請求從遠程主機傳輸多個文件的語法是經過指定和第一個遠程地址格式相同的多個遠程地址參數,或
者能夠省略主機名部分。例如,下面的命令都會正常工做:
(譯者注:遠程地址中省略主機名時,將取前一個遠程地址的主機名做爲它的主機名)
rsync -av host:file1 :file2 host:file{3,4} /dest/
rsync -av host::modname/file{1,2} host::modname/file3 /dest/
rsync -av host::modname/file1 ::modname/file{3,4}
老版本的rsync須要在SRC部分使用引號和空格,以下示例:
rsync -av host:'dir1/file1 dir2/file2' /dest
rsync host::'modname/dir1/file1 modname/dir2/file2' /dest
這種方式在後續rsync版本中將繼續(默認)有效,可是它沒有第一種方式簡便。
若是你要傳輸一個文件名中包含了空白字符的文件,可使用"--protect-args"("-s")選項,也能夠
使用轉義符將空白字符轉義。例如:
rsync -av host:'file\ name\ with\ spaces' /dest
鏈接RSYNC DAEMON
rsync也能夠不使用遠程shell做爲傳輸方式。這狀況看下,將直接鏈接遠程RSYNC守護進程,通常使
用的是TCP的873端口。(顯然,這要求遠程的RSYNC守護進程必須是已運行的,見下文"啓動RSYNC服務
以接受鏈接請求")
這種方式的rsync使用方式和遠程shell方式同樣,除了:
o 須要使用雙冒號"::"分隔主機名和路徑,或者使用rsync://的URL格式。
o "path"部分的第一個詞語是一個模塊名(譯者注:如hostname::modname/file)。
o 遠程RSYNC守護進程可能會輸出你鏈接它的日期時間。
o 若是沒有指定遠程rsync服務的路徑名,將列出rsync服務主機上可訪問的路徑。
o 若是沒有指定本地目標地址,將列出遠程rsync服務主機上指定的文件。
o 必須不能指定"--rsh"("-e")選項。
如下是拷貝遠程模塊名爲"src"中的全部文件示例:
rsync -av host::src /dest
遠程daemon上的某些模塊可能須要身份驗證。若是是這樣,在鏈接時將會被詢問輸入密碼。若是想要
避免被詢問,能夠經過設置環境變量RSYNC_PASSWORD的值爲你要使用的密碼,或者使用選項
"--password-file"。這很是適用於腳本中。
警告:在某些系統上,環境變量是對全部用戶可見的,此時建議使用"--password-file"選項。
你能夠經過web代理(web proxy)的方式與rsync daemon創建鏈接,只需設置環境變量RSYNC_PROXY的
值爲hostname:port指向你的web代理。但要注意,web代理的配置必須得支持與873端口的代理鏈接。
你還可使用代理程序與rsync daemon創建鏈接,只需設置環境變量RSYNC_CONNECT_PROG的值爲你想
要運行的命令來代替創建套接字鏈接。環境變量的值中可能會包含"%H",它表明rsync命令中所指定
的主機名(所以若是想在值中包含一個"%"字符,須要使用"%%")。例如:
export RSYNC_CONNECT_PROG='ssh proxyhost nc %H 873'
rsync -av targethost1::module/src/ /dest/
rsync -av rsync:://targethost2/module/src/ /dest/
上面的命令中使用ssh在proxyhost上運行了nc命令,它將會轉發全部數據到目標主機(%H)的873端口。
經過遠程SHELL鏈接使用RSYNC-DAEMON特性
某些時候使用rsync daemon的各類特性(如可命名的模塊)比容許任意套接字鏈接到系統上(除了真正
須要使用遠程shell的訪問)更方便。rsync支持使用遠程shell鏈接到主機上,它會派生出一個單用
途(single-use)的"daemon"服務用於讀取遠程用戶家目錄下的配置文件。若是你想要加密
daemon-sytle傳輸的數據,但因爲daemon是被遠程用戶啓動的,你沒法經過這樣的daemon使用像
chroot這樣的功能,也沒法修改uid,這時使用遠程shell是比較好的。(另外一個加密daemon傳輸的方
式是,使用ssh創建本地端口到遠程主機的隧道,而且在遠程主機上配置一個普通的rsync daemon只
容許從"localhost"發起鏈接(譯者注:其實就是配置ssh的端口轉發))
從用戶角度來看,使用遠程shell鏈接使用rsync daemon與鏈接普通rsync daemon的命令行語法幾乎
相同,惟一例外的是必須在命令行使用--rsh=COMMAND選項設置遠程shell程序。(設置RSYNC_RSH環境
變量不會打開此功能)例如:
rsync -av --rsh=ssh host::module /dest
若是須要指定不一樣用戶的遠程shell,必定要記住,host前綴"user@"設置的是rsync上的用戶(即用於
須要用戶認證的模塊)。這意味着必須在ssh命令中使用"-l user"選項來指定遠程shell,下面的例子
中使用了"--rsh"的短格式選項"-e":
rsync -av -e "ssh -l ssh-user" rsync-user@host::module /dest
"ssh-user"將在ssh上生效,而"rsync-user"將用於認證使用"module"模塊。(譯者注:對於鏈接目標
非daemon時,"ssh -l user"和"user@"做用是同樣的)
(譯者注:遠程shell鏈接使用rsync daemon,和真正的守護進程rsync daemon是不一樣的,後者是配置
好後永久監聽在後臺提供服務,而遠程shell使用rsync daemon則是一種臨時性單用途的daemon進程,
雖然也會讀取配置文件,但它是由遠程shell進程fork出來的子進程,這次鏈接結束後,此daemon進
程會自動消逝)
啓動RSYNC服務以接受鏈接請求
要鏈接到一個rsync daemon,遠程系統上的rsync daemon必須已經運行(或者像inetd同樣,已經配置
了當特殊端口上有鏈接時會派生出rsync daemon)。關於如何啓動一個能處理從套接字進來的鏈接的
daemon的完整信息,請看rsyncd.conf(5),這是rsync daemon的配置文件,它包含如何運行daemon的
很是詳細的信息(包括獨立模式(stand-alone)和inetd格式的配置)
若是你使用的是某種遠程shell傳輸方式,則沒有手動啓動rsync daemon的必要。
傳輸過程當中的排序
Rsync老是會在內部傳輸列表中對指定的文件名進行排序。這將會使得相同目錄名的文件被合併在一
起進行傳輸,這樣一來,去除重複文件名就比較容易,但這可能會讓一些人產生疑惑:文件傳輸時
的順序和命令行中給的順序不一致。
若是想要讓那個某個特殊的文件比其餘文件先傳輸,能夠將它們分隔到不一樣的rsync命令上,或考慮
使用"--delay-updates"選項(它不會影響傳輸時的排序,但會使得最後的文件更新(file-updating)
階段更迅速)。
示例
如下是一些我使用rsync的示例。
要備份包含了大量word文檔和郵件文件夾的家目錄,使用一個任務計劃(cron job)運行:
rsync -Cavz . arvidsjaur:backup
每一個晚上都將經過PPP鏈接到主機"arvidsjaur"上的backup目錄。
要同步samba源碼樹,使用下面的Makefile targets:
get:
rsync -avuzb --exclude '*~' samba:samba/ .
put:
rsync -Cavuzb . samba:samba/
sync: get put
這可讓我和鏈接另外一端的CVS目錄保持同步。而後再在遠程主機上作一些CVS操做,這節省了我大
量時間,由於遠程CVS協議的效率並不高。
我使用下面的命令在個人"old"和"new"ftp站點之間作一個鏡像:
rsync -az -e ssh --delete ~ftp/pub/samba nimbus:"~ftp/pub/tridge"
因爲設置了cron計劃,每隔幾小時它就登陸一次。
選項彙總
下面是rsync中可用的命令彙總,關於選項的完整描述,請看後文。
-v, --verbose increase verbosity
-q, --quiet suppress non-error messages
--no-motd suppress daemon-mode MOTD (see caveat)
-c, --checksum skip based on checksum, not mod-time & size
-a, --archive archive mode; equals -rlptgoD (no -H,-A,-X)
--no-OPTION turn off an implied OPTION (e.g. --no-D)
-r, --recursive recurse into directories
-R, --relative use relative path names
--no-implied-dirs don't send implied dirs with --relative
-b, --backup make backups (see --suffix & --backup-dir)
--backup-dir=DIR make backups into hierarchy based in DIR
--suffix=SUFFIX backup suffix (default ~ w/o --backup-dir)
-u, --update skip files that are newer on the receiver
--inplace update destination files in-place
--append append data onto shorter files
--append-verify --append w/old data in file checksum
-d, --dirs transfer directories without recursing
-l, --links copy symlinks as symlinks
-L, --copy-links transform symlink into referent file/dir
--copy-unsafe-links only "unsafe" symlinks are transformed
--safe-links ignore symlinks that point outside the tree
-k, --copy-dirlinks transform symlink to dir into referent dir
-K, --keep-dirlinks treat symlinked dir on receiver as dir
-H, --hard-links preserve hard links
-p, --perms preserve permissions
-E, --executability preserve executability
--chmod=CHMOD affect file and/or directory permissions
-A, --acls preserve ACLs (implies -p)
-X, --xattrs preserve extended attributes
-o, --owner preserve owner (super-user only)
-g, --group preserve group
--devices preserve device files (super-user only)
--copy-devices copy device contents as regular file
--specials preserve special files
-D same as --devices --specials
-t, --times preserve modification times
-O, --omit-dir-times omit directories from --times
--super receiver attempts super-user activities
--fake-super store/recover privileged attrs using xattrs
-S, --sparse handle sparse files efficiently
-n, --dry-run perform a trial run with no changes made
-W, --whole-file copy files whole (w/o delta-xfer algorithm)
-x, --one-file-system don't cross filesystem boundaries
-B, --block-size=SIZE force a fixed checksum block-size
-e, --rsh=COMMAND specify the remote shell to use
--rsync-path=PROGRAM specify the rsync to run on remote machine
--existing skip creating new files on receiver
--ignore-existing skip updating files that exist on receiver
--remove-source-files sender removes synchronized files (non-dir)
--del an alias for --delete-during
--delete delete extraneous files from dest dirs
--delete-before receiver deletes before xfer, not during
--delete-during receiver deletes during the transfer
--delete-delay find deletions during, delete after
--delete-after receiver deletes after transfer, not during
--delete-excluded also delete excluded files from dest dirs
--ignore-errors delete even if there are I/O errors
--force force deletion of dirs even if not empty
--max-delete=NUM don't delete more than NUM files
--max-size=SIZE don't transfer any file larger than SIZE
--min-size=SIZE don't transfer any file smaller than SIZE
--partial keep partially transferred files
--partial-dir=DIR put a partially transferred file into DIR
--delay-updates put all updated files into place at end
-m, --prune-empty-dirs prune empty directory chains from file-list
--numeric-ids don't map uid/gid values by user/group name
--timeout=SECONDS set I/O timeout in seconds
--contimeout=SECONDS set daemon connection timeout in seconds
-I, --ignore-times don't skip files that match size and time
--size-only skip files that match in size
--modify-window=NUM compare mod-times with reduced accuracy
-T, --temp-dir=DIR create temporary files in directory DIR
-y, --fuzzy find similar file for basis if no dest file
--compare-dest=DIR also compare received files relative to DIR
--copy-dest=DIR ... and include copies of unchanged files
--link-dest=DIR hardlink to files in DIR when unchanged
-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
-C, --cvs-exclude auto-ignore files in the same way CVS does
-f, --filter=RULE add a file-filtering RULE
-F same as --filter='dir-merge /.rsync-filter'
repeated: --filter='- .rsync-filter'
--exclude=PATTERN exclude files matching PATTERN
--exclude-from=FILE read exclude patterns from FILE
--include=PATTERN don't exclude files matching PATTERN
--include-from=FILE read include patterns from FILE
--files-from=FILE read list of source-file names from FILE
-0, --from0 all *from/filter files are delimited by 0s
-s, --protect-args no space-splitting; wildcard chars only
--address=ADDRESS bind address for outgoing socket to daemon
--port=PORT specify double-colon alternate port number
--sockopts=OPTIONS specify custom TCP options
--blocking-io use blocking I/O for the remote shell
--stats give some file-transfer stats
-8, --8-bit-output leave high-bit chars unescaped in output
-h, --human-readable output numbers in a human-readable format
--progress show progress during transfer
-P same as --partial --progress
-i, --itemize-changes output a change-summary for all updates
--out-format=FORMAT output updates using the specified FORMAT
--log-file=FILE log what we're doing to the specified FILE
--log-file-format=FMT log updates using the specified FMT
--password-file=FILE read daemon-access password from FILE
--list-only list the files instead of copying them
--bwlimit=KBPS limit I/O bandwidth; KBytes per second
--write-batch=FILE write a batched update to FILE
--only-write-batch=FILE like --write-batch but w/o updating dest
--read-batch=FILE read a batched update from FILE
--protocol=NUM force an older protocol version to be used
--iconv=CONVERT_SPEC request charset conversion of filenames
--checksum-seed=NUM set block/file checksum seed (advanced)
-4, --ipv4 prefer IPv4
-6, --ipv6 prefer IPv6
--version print version number
(-h) --help show this help (see below for -h comment)
Rsync以daemon方式運行時,還能夠接受如下選項:
--daemon run as an rsync daemon
--address=ADDRESS bind to the specified address
--bwlimit=KBPS limit I/O bandwidth; KBytes per second
--config=FILE specify alternate rsyncd.conf file
--no-detach do not detach from the parent
--port=PORT listen on alternate port number
--log-file=FILE override the "log file" setting
--log-file-format=FMT override the "log format" setting
--sockopts=OPTIONS specify custom TCP options
-v, --verbose increase verbosity
-4, --ipv4 prefer IPv4
-6, --ipv6 prefer IPv6
-h, --help show this help (if used after --daemon)
選項
Rsync能夠接受長格式選項和段格式選項,下面列出了全部可以使用的選項。若是以多種方式指定同一
個選項,則使用逗號分隔。某些選項只有長格式,沒有短格式。若是選項要帶參數,參數只能列在長
格式選項後。若是要指定選項的參數,可使用"--option=param"的格式,也可使用空白字符替換
"="。某些參數可能須要使用引號包圍,避免被shell命令行解析。須要記住,文件名中的前導波浪號
(~)是被shell替換的,所以"--option=~/foo"將不會從波浪號進入家目錄(若要如此,將"="移除)
--help 輸出全部選項簡短格式的幫助信息並退出。爲了兼容老版本,當只使用一個"-h"選項時也會
輸出這些幫助信息。
--version
輸出rsync的版本號並退出。
-v, --verbose
該選項增長了傳輸過程當中的大量信息。默認狀況下,rsync以靜默(silent)模式工做。單個
"-v"將給出哪些文件正在被傳輸的信息,還會在傳輸結束時給出一個簡要總結信息。兩個
"-v"選項(-vv)將給出哪些文件被忽略,而且在傳輸結束時給出更詳細的信息。超過兩個
"-v"選項通常只在調試過程當中使用。
須要注意的是,傳輸過程當中輸出的文件名是被"--out-format=%n%L"處理過的,它表示僅顯
示文件名,若是是軟連接文件,則還顯示它指向誰。當使用一個"-v"選項時,將不會告訴你
文件的屬性改變了。若是明確要列出改變了屬性的文件列表(既可使用"--itemize-change"
也能夠在"--out-format"中增長"%i"),(客戶端)輸出結果中將老是會增長全部已改變的條目
清單。更詳細信息見"--out-format"選項。
-q, --quiet
該選項將減小大量傳輸過程當中的信息,但沒法禁止從遠程主機產生的信息。該選項適用於
cron任務計劃中。
--no-motd
此選項會影響客戶端在守護程序傳輸開始時輸出的信息。它會禁止motd信息,可是也會影響
daemon對"rsync host::"請求顯示模塊列表的迴應信息,所以若是想要請求daemon的模塊列
表,應該忽略該選項。
-I, --ignore-times
正常狀況下,rsync會忽略文件大小相同且最後修改時間戳相同的文件,該選項關閉"quick
check"行爲,使得全部的文件都會被更新。
(譯者注:即從增量拷貝變成全量拷貝)
--size-only
該選項將修改rsync查找須要被傳輸文件的"quick check"算法,默認該算法會找出全部大小
或最後修改時間戳改變文件並傳輸,使用該選項將僅查找大小改變的文件並傳輸。在使用了
某些鏡像備份但沒有保留精確時間戳的狀況下,使用帶有該選項的rsync將很是有幫助。
--modify-window
當比較時間戳時,rsync會把二者相差不超過該選項所指定的值時認爲是相同的時間戳。正常
狀況下該選項的值爲0(精確匹配),但在某些狀況下,將此選項的值設置爲非0將很是有用。
特別是與Windows的FAT文件系統(此文件系統有2秒範圍內的精確度差別)傳輸數據時,設置
"--modify-window=1"將很是有用(容許文件時間戳有1秒的差別)。
-c, --checksum
此選項改變了rsync檢查文件改變和決定是否要傳輸的方式。不使用該選項,rsync使用
"quick check"(默認的)檢查發送端和接收端兩邊文件的大小和最後一次修改時間是否改變。
使用該選項,將對每一個匹配了大小的文件比較128位的校驗碼。生成校驗碼意味着兩端都會消
耗大量的磁盤I/O以讀取傳輸隊列中文件的數據內容(傳輸隊列早於讀取文件數據,即先quick
check,再生成和比較校驗碼),所以該選項會大幅度下降效率。
發送端生成校驗碼的時刻是作文件系統掃描以生成可獲取文件列表時。接收端生成校驗碼的
時刻是在掃描哪些文件發生改變時,它會對那些與發送端文件大小相同的文件生成校驗碼。
因此,該選項的結果是:只傳輸校驗碼改變或文件大小改變(意味着校驗碼也改變)的文件。
注意,rsync默認老是在文件傳輸完成後再生成所有文件(whole-file)的校驗碼,並驗證傳輸
完成的文件是否正確重組。可是使用該選項,它隱含了在傳輸前作"該文件是否須要更新?"
的檢查,使得文件傳輸結束後不會自動去驗證它們重組的正確性。
從協議30版本開始(對應的rsync版本從3.0.0開始)使用的校驗碼是MD5格式的,更老的協議版
本使用的校驗碼是MD4格式的。
(譯者注:即基於checksum來判斷文件是否要同步,而不是基於quick check算法。在兩個地
方會計算checksum:sender端發送文件列表時,接收端的generator判斷文件是否要傳輸時)
-a, --archive
該選項等價於"-rlptgoD"選項的組合。它表示使用歸檔模式並保留幾乎全部屬性(明顯遺漏了
"-H"選項)。上面的等價選項的惟一例外是指定了"--files-from"選項,它使得"-r"選項被強
制忽略。
注意,"-a"選項不保留硬連接屬性,由於查找多個硬連接文件是很是昂貴的。若要保留硬鏈
接屬性,必須與"-a"分開獨立使用"-H"選項。
--no-OPTION
在選項前面加上前綴"no-"表示關閉該選項的隱含選項功能。不是全部選項都能使用"no-"前
綴:只有那些隱含了其餘選項的選項(如--no-D,--no-perms)或者不一樣環境下有不一樣默認值的
選項(如--no-whole-file,--no-blocking-io,--no-dirs)。"no-"後面便可以接短格式選項,
也能夠接長格式選項(如--no-R等價於--no-relative)
例如:你想使用"-a"選項但不想使用它的隱含選項"-o"(--owner),即讓"-a"等價於
"-rlptgD",能夠指定"-a --no-o"(或-a --no-owner)。
選項的順序是很是重要的:若是指定"--no-r -a",則最終會啓用"-r"選項,與之相反的是
"-a --no-r"。一樣須要注意的是"--files-from"的反作用,它的位置順序不重要,由於它影
響了某些選項的默認行爲,並輕微改變了"-a"的意義(見"--files-from"選項以獲取更詳細說
明)。
-r, --recursive
此選項告訴rsync以遞歸模式拷貝目錄。參見"--dirs"(-d)。
從rsync 3.0.0開始,如今使用的遞歸算法是一種增量掃描,比之前少佔用不少內存,而且在
最初掃描完一些目錄後就開始進行數據傳輸。增量掃描僅影響遞歸算法,不會改變非遞歸的
傳輸類型。一樣,只有傳輸兩端的版本都高於3.0.0纔會如此。
某些選項要求rsync知道完整的文件列表,因此它們會禁用增量遞歸模式。這些選項包括:
--delete-before,--delete-after,--prune-empty-dirs和--delay-updates。正由於如此,
若是兩端rsync版本都高於3.0.0時,指定"--delete"時的默認刪除模式變爲
"--delete-during"(可使用"--del"或"--del-during"來精確指定刪除模式)。一樣,選擇
使用"--delete-delay"選項比"--delete-after"會更好。
增量遞歸模式可使用"--no-inc-recursive"(--no-i-r)選項來禁用。
-R, --relative
表示使用相對路徑。這意味着會將命令行中指定的全路徑名而非路徑最尾部的文件名發送給
服務端。當要一次性發送多個不一樣目錄時該選項很是有用。例如,若是使用下面的命令:
rsync -av /foo/bar/baz.c remote:/tmp/
這將會在遠程主機上的/tmp/目錄下建立一個baz.c文件。若是使用下面的命令:
rsync -avR /foo/bar/baz.c remote:/tmp/
將會在遠程主機的/tmp/目錄下遞歸建立foo/bar/baz.c,它保留了命令行中指定的全路徑。
這些額外的路徑元素被稱爲"隱含目錄"(如上例中的foo和foo/bar)。
從rsync 3.0.0開始,rsync老是會發送這些隱含目錄做爲文件列表中的真實的目錄,即便發
送端的某個路徑元素是一個軟連接。這使得拷貝全路徑文件時,不用擔憂由於路徑中包含了
軟連接而可能出現的非預期的問題(譯者注:即連接追蹤)。若是要複製服務端符號連接,請
經過其路徑來複制符號連接,並經過實際路徑來複制器真實對象。若是rsync版本較老,可
能須要使用"--no-implied-dirs"選項。
也能夠對所指定的路徑限制發送時做爲隱含目錄的路徑信息。從rsync 2.6.7版本開始,
rsync能夠在源路徑插入一個點".",就像這樣:
rsync -avR /foo/./bar/baz.c remote:/tmp/
這將會在遠程主機上建立/tmp/bar/baz.c。(注意點後面必須跟上斜線,所以"/foo/."將不會
被縮寫)對於更老版本的rsync,可能須要改變目錄來限制源路徑。例如,推送文件時:
(cd /foo; rsync -avR bar/baz.c remote:/tmp/)
(注意,括號將把兩個命令放入子shell中執行,所以cd改變目錄不會影響將來的命令)若是使
用老版本的rsync拉取文件,使用如下慣用格式(但只適用於非daemon的傳輸):
rsync -avR --rsync-path="cd /foo; rsync" \
remote:bar/baz.c /tmp/
--no-implied-dirs
該選項影響"--relative"選項的默認行爲。當指定該選項時,在傳輸時不會包含源文件的隱
含目錄。這意味着目標主機上對應路徑元素會被保留不變(若是它們存在的話),而且缺乏的
隱含目錄會以默認屬性方式被建立。甚至容許目標主機上隱含路徑元素和源地址的屬性有非
常大的區別,例如在接收端某文件多是某個目錄的符號連接。
另外,當rsync要傳輸的文件爲"path/foo/file"時,若是使用"--relative"選項,則目錄
"path"和"path/foo"是隱含目錄。若是在目標主機上"path/foo"是一個指向"bar"文件的符號
鏈接,接收端的rsync會刪除"path/foo",並重建它爲一個目錄,而後將接收到的文件放入此
新目錄中。使用"--no-implied-dirs"選項,接收端使用已存在的路徑元素更新
"path/foo/file",意味着最終會在"path/bar"中建立file文件。另外一個實現鏈接保留功能的
方法是使用"--keep-dirlinks"選項(也將會使得後續的傳輸從符號連接定位到目錄中)。
當使用早於3.0.0版本的rsync拉取文件時,若是發送端的路徑中包含了符號連接,而且但願
隱含目錄能以普通目錄方式被傳輸時,可能須要使
用該選項。
-b, --backup
當使用該選項時,若是目標路徑中已存在須要被傳輸或須要被刪除的文件時將重命名該文件。
可使用"--backup-dir"選項控制備份文件的保存路徑,使用"--suffix"選項控制備份時追
加在原文件名後的後綴。
注意,若是不指定"--backup-dir"選項:(1)將隱含"--omit-dir-times"選項(2)若是
"--delete"選項同時影響該文件,rsync將在排除規則的尾部添加一個起"保護"做用的篩選規
則(例如,-f "P *~"),這會阻止以前備份的文件被刪除。注意,若是你使用了本身定義的篩
選規則,你可能須要手動插入你的exclude/include規則,而且保證其優先級較高防止被其餘
規則先匹配上而致使失效。
--backup-dir=DIR
結合"--backup"選項一塊兒使用,這表示rsync在遠端將存儲全部備份文件到指定的目錄下。這
可用於增量備份。可使用"--suffix"選項額外指定備份後綴(不然備份到指定目錄的文件將
使用原文件名)。
須要注意若是擬製定了一個相對路徑,備份目錄將會相對到目標目錄,所以你可能真正想要
指定的是一個絕對路徑或以"../"開頭的路徑。若是接收端是rsync daemon,備份目錄將沒法
超出模塊的路徑層次結構,所以請特別注意不要將其刪除或複製到其中。
--suffix=SUFFIX
該選項可自定義"--backup"(-b)選項的備份文件名後綴,若是沒有指定"--backup-dir"選項,
則默認後綴爲"~",不然後綴爲空字符串。
-u, --update
該選項將強制忽略在目標路徑下已存在且修改時間比源文件更新的文件。(若是已存在的目標
文件的修改時間和源文件相同,則只在文件大小不一樣時纔會更新)
注意該選項不會影響軟連接或其餘特殊文件的拷貝機制。並且,無論兩端文件中的數據是否
相同,考慮發送端和接收端不一樣的文件格式對於更新來講也是很是重要的。換句話說,若是
源文件是一個目錄,而目標已存在的同名文件倒是一個普通文件,則rsync會直接忽略它們的
時間戳。
該選項是一種傳輸規則,不是排除規則,所以不會影響進入file-lists的文件,也所以不會影
響刪除。它僅會限制接收端請求傳輸的文件。
--inplace
該選項會改變當數據須要更新時,rsync傳輸文件的方式。默認狀況下,rysnc會建立一個文件
的新副本,當此文件傳輸完成時會將此副本移動到指定的路徑下。使用此選項後,將直接把更
新部分的數據寫入到目標文件中。
(譯者注:此選項的拷貝機制能夠理解爲相似於drbd基於塊的拷貝機制)
這會帶來如下幾種影響:
o 硬連接不會被破壞。這意味着經過其餘硬連接文件能夠直接訪問到新數據。更進一步
說,嘗試拷貝不一樣源文件到多重連接的目標文件時,將致使目標數據像"拔河"同樣,
來來回回地變化。
o 使用中的二進制程序不會被更新(操做系統會防止這樣的事情發生,二進制程序自身也
會在嘗試數據交換時崩潰)。
o 在傳輸過程當中,文件的數據會進入不一致狀態,而且若是傳輸被中斷或者更新失敗時,
文件將繼續不一致。
o rsync沒法將數據寫入一個沒法被更新的文件中。雖然超級管理員能夠更新任意文件,
但普通用戶須要獲取文件的寫權限才能打開文件並向其中成功寫入數據。
o 若是目標文件中的數據在它被複制到某個位置以前被覆蓋,則rsync的增量拷貝效率會
下降。若是使用了"--backup"則不會出現這樣的問題,由於rsync足夠智能,它會使用
備份文件做爲傳輸的基準文件。
警告:不能使用該選項對那些正被其餘用戶訪問的文件,所以在選擇使用此選項進行拷貝時需
要當心謹慎。
該選項適用於對於那些基於數據塊(block-based)改變或向文件尾部追加了數據的大文件,也
適用於那些安裝在磁盤上而非網絡上的系統。它也能有效幫助保持寫時複製(copy-on-write)
文件系統的快照。
該選項隱含了"--partial"選項(由於傳輸中斷不會刪除文件),但和"--partial-dir"以及
"--delay-udpates"選項衝突。
--append
該選項使得rsync以追加數據到文件尾部的方式來更新文件,它會假定接收端上已存在的文件
和發送端文件的前段數據是一致的。若是接收端上文件的大小等於或大於發送端文件的大小,
則此文件會被忽略。該選項不會干涉不被傳輸文件的非內容屬性(non-content,如權限,全部
者等),也不會影響對非普通文件(non-regular)的更新。隱含了"--inplace"選項,可是和
"--sparse"選項不衝突(由於它老是擴充一個文件的長度)。
--append-verify
工做方式相似於"--append"選項,可是接收端已存在的數據在驗證階段會被包含在whole-file
校驗碼中,若是最後驗證階段失敗了,該文件會被傳輸(rsync將使用正常、非追加的
"--inplace"模式重發文件)。
-d, --dirs
以不遞歸的方式拷貝目錄自己,它不會拷貝目錄中的文件。不像"--recursive"選項,只拷貝
目錄中的內容而不拷貝目錄自己。除非目錄名中使用了"."或者以斜線結尾(如".","dir/.",
"dir/"等)。既不指定該選項,也不指定"--recursive"選項時,rsync將忽略全部遇到的目錄
(並會向輸出這些影響信息)。若是同時指定了"--dirs"和"--recursive"選項,"--recursive"
將優先生效。
若未給定"--recursive"選項,"--files-from"或"--list-only"選項會隱含"--dirs"選項,此
時在列表中能見到全部目錄。要想關閉此功能,能夠指定"--no-dirs"或"--no-d"選項。
還有一個比較有用的向後兼容的選項:"--old-dirs"(--old-d)。它告訴rsync使用
"-r --exclude='/*/*'"僅列出目錄而不遞歸。
-l, --links
當遇到符號連接時,將在目標路徑從新建立符號連接。(譯者注:即拷貝符號連接自己)
-L, --copy-links
使用該選項時,當遇到符號連接時將拷貝它所指向的目標而不是符號連接自己(譯者加:但僅
只是追蹤了連接文件指向文件中的數據,文件名仍然是符號連接文件的文件名。舉個例子,
若是client端a文件-->b文件,則使用該選項拷貝a時,將在receiver端生成a文件,但a文件
是一個普通文件,其中的數據來源是client端b文件的數據)。老版本的rsync使用該選項還會
告訴接收端也追蹤符號連接到其指向的目標中。在目前的rsync版本中,要實現這樣的功能需
要指定"--keep-dirlinks"(-K)選項。
--copy-unsafe-links
This tells rsync to copy the referent of symbolic links that point outside the
copied tree. Absolute symlinks are also treated like ordinary files, and so are
any symlinks in the source path itself when --relative is used. This option has
no additional effect if --copy-links was also specified.
--safe-links
This tells rsync to ignore any symbolic links which point outside the copied tree.
All absolute symlinks are also ignored. Using this option in conjunction with
--relative may give unexpected results.
-k, --copy-dirlinks
該選項使得sender端將符號連接視爲一個目錄,就像它真的是一個目錄同樣。若是你不想讓指
向非目錄的符號連接受到影響,可使用該選項。
Without this option, if the sending side has replaced a directory with a symlink
to a directory, the receiving side will delete anything that is in the way of the
new symlink, including a directory hierarchy (as long as --force or --delete is
in effect).
See also --keep-dirlinks for an analogous option for the receiving side.
--copy-dirlinks applies to all symlinks to directories in the source. If you want
to follow only a few specified symlinks, a trick you can use is to pass them as
additional source args with a trailing slash, using --relative to make the paths
match up right. For example:
rsync -r --relative src/./ src/./follow-me/ dest/
This works because rsync calls lstat(2) on the source arg as given, and the
trailing slash makes lstat(2) follow the symlink, giving rise to a directory in
the file-list which overrides the symlink found during the scan of "src/./".
-K, --keep-dirlinks
該選項使得receiver端將符號連接視爲目錄文件,就像它是真的目錄同樣,但只有它在sender
端能匹配一個真實目錄時纔會如此。不使用該選項,receiver端的符號連接將被刪除或替換爲
一個真實目錄。
例如,假設你要傳輸一個包含文件"file"的目錄"foo",可是在receiver端上的"foo"是一個指
向"bar"目錄的符號連接。若是不使用該選項,receiver端將刪除符號連接"foo",而後重建它
爲一個目錄,而後接收"file"到此目錄中。若是使用了該選項,receiver端將保留符號連接,
而後將"file"存放到"bar"目錄中去。
(譯註:上述示例的命令格式爲"rsync -r foo user@host:/path",其中path下有個名爲foo
的連接文件)
須要注意一點:若是使用了"--keep-dirlinks",你必須信任你全部拷貝中的連接文件。若是
某個非信任用戶要建立屬於它本身的符號連接(指向某目錄),在下一次傳輸過程當中,可能會使
用真實目錄替換掉符號連接並影響連接文件所指向目錄中的文件內容。對於備份拷貝,你最好
是用mount的bind功能而不是使用符號連接來改變接收端的目錄層次。
參見"--copy-dirlinks"選項,它是在sender端上相似的選項。
-H, --hard-links
This tells rsync to look for hard-linked files in the source and link together
the corresponding files on the destination. Without this option, hard-linked
files in the source are treated as though they were separate files.
This option does NOT necessarily ensure that the pattern of hard links on the
destination exactly matches that on the source. Cases in which the destination
may end up with extra hard links include the following:
o If the destination contains extraneous hard-links (more linking than what
is present in the source file list), the copying
algorithm will not break them explicitly. However, if one or more of the
paths have content differences, the normal file-update process will break
those extra links (unless you are using the --inplace option).
o If you specify a --link-dest directory that contains hard links, the
linking of the destination files against the --link-dest files can
cause some paths in the destination to become linked together due to
the --link-dest associations.
Note that rsync can only detect hard links between files that are inside the
transfer set. If rsync updates a file that has extra hard-link connections to
files outside the transfer, that linkage will be broken. If you are tempted to
use the --inplace option to avoid this breakage, be very careful that you know
how your files are being updated so that you are certain that no unintended
changes happen due to lingering hard links (and see the --inplace option for
more caveats).
If incremental recursion is active (see --recursive), rsync may transfer a
missing hard-linked file before it finds that another link for that contents
exists elsewhere in the hierarchy. This does not affect the accuracy of the
transfer (i.e. which files are hard-linked together), just its efficiency (i.e.
copying the data for a new, early copy of a hard-linked file that could have
been found later in the transfer in another member of the hard-linked set of
files). One way to avoid this inefficiency is to disable incremental recursion
using the --no-inc-recursive option.
-p, --perms
該選項告訴receiver端的rsync,要將目標文件的權限值設置爲什麼源文件同樣(即權限保留)。
(參見"--chmod"選項以獲取rsync修改sender端權限的方式)
當沒有使用該選項時,將以以下方式設置權限值:
o 已存在的文件繼續保留它們的原有權限,儘管"--executability"選項可能會改變文
件的執行權限。
o 對於新文件,將從源文件中獲取普通權限值,再配合receiver端文件所在目錄的默認
ACL權限或umask值決定文件的最終權限,而且會禁用它們的特殊權限位,除非新的目
錄文件從其父目錄中繼承了sgid權限。
所以,當"--perms"和"--executability"選項都被禁用時,rsync的行爲和其它文件拷貝工具
的行爲同樣,例如cp、tar。
總結如下:要設置目標文件(包括新文件和已存在的舊文件)的權限值爲源文件的權限值,使用
"--perms"選項。要設置新的目標文件默認權限,請確保"--perms"選項是關閉的,而後使用
"--chmod=ugo=rwX"(這將保證啓用全部非掩碼位權限)。若是想以更簡單的方式實現後一種情
況,你可能須要爲其定義一個popt別名,例如將下面的命令行放入文件~/.popt中(下面的命令
中定義了"-Z"選項,並使用了"--no-g"使得目標文件的所屬組使用目標目錄的默認組):
rsync alias -Z --no-p --no-g --chmod=ugo=rwX
而後能夠在命令行中使用新的選項,例如:
rsync -avZ src/ dest/
(警告:請確保"-a"選項不是跟隨在"-Z"後的,不然將從新啓用上面已經定義的兩個"--no-*"
選項。)
-E, --executability
該選項使得rsync在未指定"--perms"選項時對普通文件保留文件的執行權限(或者不可執行權
限)。普通文件上開啓了"x"才認爲有可執行權限。當目標文件已存在且和對應源文件的可執
行權限值不同時,rsync將採用以下方式修改權限:
o To make a file non-executable, rsync turns off all its ’x’ permissions.
o To make a file executable, rsync turns on each ’x’ permission that has a
corresponding ’r’ permission enabled.
若是指定了"--perms"選項,則該選項被忽略。
-A, --acls
使目標文件的ACL屬性和源文件的ACL屬性一致。該選項隱含了"--perms"選項。
-X, --xattrs
使目標文件的擴展屬性和源文件的擴展屬性保持一致。
--chmod
該選項使得rsync能夠將目標文件的權限設定爲此處所指定的權限值,讓rsync覺得這些指定
的權限就是源文件的權限。也所以在未配合"--perms"一塊兒使用時該選項無效。
在chmod(1)的man文檔中記錄了普通的語法解析規則,你能夠經過加上一個前綴"D"來指定該
權限規則只對目錄有效,或者加上前綴"F"指定該權限規則只對普通文件有效。例如,下面的
例子保證了全部目錄都標記了sgid權限,其它人對文件都不可寫,全部者和所屬組均可寫,
且全部人都有執行權限:
--chmod=Dg+s,ug+w,Fo-w,+X
能夠指定多個使用逗號分隔的"--chomod"選項。
-o, --owner
該選項使得rsync將目標文件的全部者設置爲和源文件同樣(即保留全部者屬性),但要求接收
端的rsync是以super user身份運行的(或指定了"--no-super"選項)。若是不指定該選項,目
標文件的全部者將設置爲調用rsync的用戶身份(譯者注:例如rsync /src name1@host:/path,
則目標文件的全部者爲name1)。
默認狀況下,目標文件的全部者名稱由uid匹配而來,但在某些環境下,可能會保留使用uid。
(詳細信息見"--numeric-ids"選項)
(譯者注:例如源文件的全部者爲name1,其uid=1000,那麼將在目標主機上尋找uid=1000所
對應的用戶名,若是能找到則全部者設置爲用戶名,不然設置爲uid=1000)
-g, --group
此選項的意義徹底同"--owner",因此不作對應翻譯。
--devices
該選項使得rsync能夠傳輸字符設備和塊設備到目標主機上以從新建立這些設備。該選項要求
接收端的rsync是以super user身份運行的(譯者注:例如,root用戶也算是super user,則
rsync /devicename root@host:/path),不然該選項失效。(見"--super"和"--fake-super"
選項)
--specials
該選項使得rsync能夠傳輸特殊文件,如命名套接字,命名管道等。
-D 該選項等價於"--devices --specials"選項組合。
-t, --times
該選項告訴rsync將mtime隨文件一塊兒傳輸給receiver,使得目標文件的mtime和源文件同樣。
千萬注意,若是不指定該選項,本來排除那些mtime相同的文件而得到的性能提高將再也不生
效;換句話說,若是沒有在rsync命令行中使用"-t"或"-a"選項,將致使下一次傳輸以相似於
"-I"的方式進行,即更新全部文件(儘管在文件沒有真正發生更改的狀況下,rsync的增量傳
輸算法可讓更新效率很高,但最好仍是使用"-t")
-O, --omit-dir-times
該選項告訴rsync,當保留mtime(見"--times")時,將忽略目錄。若是receiver端正在經過
NFS共享目錄,使用"-O"是一個不錯的選擇。若指定了"--backup"但未指定"--backup-dir",
將隱含該選項。
--super
該選項告訴receiver端在進行某些操做時嘗試使用super-user身份,儘管receiver端的rsync
不是以super user身份運行的。這些操做包括:經過"--owner"保留文件全部者,經過
"--groups"保留文件所屬組(包括輔助組),經過"--devices"選項拷貝設備文件。在receiver
端未以super user身份調用rsync時,這些選項頗有用。若是要關閉super user選項功能,則
使用"--no-super"
--fake-super
若是啓用了該選項,rsync將經過對附加在每一個文件上的擴展屬性(根據實際須要)的保存/恢復
來模擬super user。擴展屬性包括:文件的owner、group、文件的設備信息(設備文件和特殊
文件被建立爲空文本文件)以及全部特殊權限位(suid/sgid/sbit)。
在不使用super user備份數據時但又想保存ACL屬性時,該選項頗有用。
"--fake-super"選項默認隻影響命令發起端,若是想要經過遠程shell影響遠程端時,能夠指
定rsync的路徑:
rsync -av --rsync-path="rsync --fake-super" /src/ host:/dest/
因爲本地拷貝時,兩端都在本地主機上,該選項將會同時影響本地的sender端和receiver端
的文件。若是想要避免這樣的狀況,須要經過指定"localhost"的地址方式來實現拷貝,或者
可能也可使用"lsh"遠程shell來完成。
該選項會被"--super"以及"--no-super"選項覆蓋。
其餘信息能夠參見rsyncd.conf文件中的"fake super"。
-S, --sparse
嘗試以高效率的方式處理稀疏文件,使得它們在目標主機上佔用更少的空間。該選項不能和
"--inplace"選項一塊兒使用,由於"--inplace"不能向稀疏模式的文件中覆蓋數據。
-n, --dry-run
該選項使得rsync僅測試運行(並生成和真正運行時幾乎同樣的輸出信息)。該選項常和"-v"、
"--verbose"、"-i"、"--itemize-changes"選項一塊兒使用,以便查看rsync在這些選項下是如
何工做的。
配合"--itemize-changes"時的輸出結果應該要和真正運行的結果徹底一致(除非人爲故意欺
騙rsync或系統調用失敗)。若是輸出結果不一致,則出現了bug。配合其餘幾個選項時,輸出
結果除了在某些方面外應該保持幾乎一致。尤爲是,dry run不會真的發送數據,所以
"--progress"將的結果將極可能異常。
-W, --whole-file
使用該選項將使得rsync再也不使用增量傳輸算法,而是傳輸全部文件。若是源和目標主機之間
的帶寬高於磁盤的帶寬(特別是"磁盤"是網絡文件系統時),則該選項比增量傳輸更有效。當
源和目標都是本地時,該選項是默認的傳輸算法,但若受到write batch模式影響,則此算法
不生效。
(譯者注:假設A主機和B主機之間的網絡能夠以1000MB/s的速度傳輸,而目標主機B上磁盤的
帶寬只有500MB/s,顯然目標主機在文件重組時從basis file讀取數據塊的速度不如A發送給
B快,因此在這種狀況下,增量傳輸不如全量傳輸)
-x, --one-file-system
該選項告訴rsync不能跨文件系統遞歸(譯者注:例如根目錄下有mnt目錄,mnt經常使用來作掛載
點,則遞歸根目錄時,不會遞歸到mnt裏面)。該選項不會限制用戶從多個文件系統指定拷貝
項,僅只是限制rsync在每一個目錄下進行遞歸,同時也以相似的限制方式限制刪除時receiver
端遞歸。須要記住,使用mount命令的"bind"功能綁定了設備文件時,它也被認爲是在同一個
文件系統上。
若是重複指定該選項,rsync將忽略client端全部的掛載點目錄。不然,當遇到掛載點時將當
做是空目錄(這些空目錄使用已掛載目錄的屬性,由於掛載點目錄下的文件是沒法訪問的)。
若是指定了"--copy-links"或"--copy-unsafe-links"選項使得rsync"瓦解"符號連接,則符
號連接所指向的是另外一個設備上的目錄時將和掛載點同樣對待。該選項不會影響指向非目錄
的符號連接。
(譯者注:翻譯有點不標準,如下是原文)
This tells rsync to avoid crossing a filesystem boundary when recursing. This does
not limit the user’s ability to specify items to copy from multiple filesystems,
just rsync’s recursion through the hierarchy of each directory that the user
specified, and also the analogous recursion on the receiving side during deletion.
Also keep in mind that rsync treats a "bind" mount to the same device as being on
the same filesystem.
If this option is repeated, rsync omits all mount-point directories from the copy.
Otherwise, it includes an empty directory at each mount-point it encounters
(using the attributes of the mounted directory because those of the underlying
mount-point directory are inaccessible).
If rsync has been told to collapse symlinks (via --copy-links or
--copy-unsafe-links), a symlink to a directory on another device
is treated like a mount-point. Symlinks to non-directories are
unaffected by this option.
--existing, --ignore-non-existing
告訴rsync,若是目標主機上文件或文件所在目錄還不存在,則不自動建立它們,即這些文件
將不被傳輸。若是該選項和"--ignore-existing"選項一塊兒使用,將不更新任何文件(若是你
的目的是刪除目標主機上的無關文件,這將很是有用)。
(譯者注:例如rsync --existing /etc/dhcp/* /tmp,因爲/tmp下沒有dhcp目錄,因此dhcp
目錄和其中的文件都不會被傳輸到/tmp下)
該選項屬於一種transfer rule,而不是exclude rule,所以不會影響進入file list的文件,
也所以不會影響刪除操做。該選項僅對receiver所請求要傳輸的文件進行了限制。
--ignore-existing
該選項告訴rsync忽略對目標主機上已存在的文件的更新(不會忽略已存在的目錄,或者什麼
也不作)。見"--existing"選項說明。
該選項屬於一種transfer rule,而不是exclude rule,所以不會影響進入file list的文件,
也所以不會影響刪除操做。該選項僅對receiver所請求要傳輸的文件進行了限制。
對於使用了"--link-dest"選項作備份時,碰巧備份被中斷,若是想繼續完成備份,則該選項
有用。由於"--link-dest"選項會拷貝到一個新的目錄層次中,使用"--ignore-existing"將
保證已存在的文件不會被調整。這意味着該選項僅盯着目標上已存在的文件不放。
--remove-source-files
該選項告訴rsync移除sender端已經成功傳輸到receiver端的文件(不包括任何目錄文件)。
--delete
該選項告訴rsync刪除receiver端有而sender端沒有的文件,但不是刪除receiver端全部文件,
而是隻對將要同步的目錄生效。你須要明確指定整個目錄(如"dir"或"dir/")而不是使用通配
符來通配目錄的內容(如"dir/*"),由於通配符會被shell進行擴展,使得rsync被請求傳輸單
個文件而非文件的父目錄。被exclude排除的文件也會從delete中排除掉,除非使用了
"--delete-excluded"選項或者標記了只對sender端匹配上的文件有效(見篩選規則中的
include/exclude修飾符)。
(譯者注:因爲exclude規則先生效,delete時認爲源端不存在而目標端存在,使得delete也
想要刪除這些被排除的文件,但默認狀況下,在刪除時對這些被排除的文件加上了保護規則,
因此這些文件沒法被delete掉,這是一個容易疑惑的地方。要刪除這些被排除的文件,只需
使用選項"--delete-excluded"選項將這些被保護的文件強制取消保護)
(譯者注:(1)不會刪除receiver端任何目錄,即便是子目錄也不刪除;(2)delete動做是由
generator進程執行的)
該選項若是錯誤使用將是很是危險的!強烈建議先使用"--dry-run"(-n)進行測試,以肯定將
刪除那些文件。
若是sender端探測到了任何i/o錯誤,將自動禁用遠程刪除功能。這是爲了防止sender端的臨
時文件系統故障(如NFS錯誤)致使大規模刪除目標文件。能夠指定"--ignore-errors"選項強
制忽略任何I/O錯誤。
"--delete"選項通常可能會配合"--delete-WHEN"的某一種或"--delete-excluded",它們不
會衝突。但若未指定任何"--delete-WHEN"時,rsync將默認採用"--delete-during"算法。
(譯者注:即在generator啓動後,每處理一個文件列表,就刪除該文件列表中須要刪除的文
件,在處理某個文件列表時不會刪除別的文件列表中的文件,其實這一點從"-vvvv"的結果中
很容易獲取到)
--delete-before
請求在傳輸開始前執行目標文件刪除行爲。該選項隱含了"--delete"選項。
(譯者注:傳輸以前刪除指的在處理全部文件列表以前先刪除全部文件列表中指定要刪除的
文件,也就是說在generator剛啓動時當即刪除全部文件列表中待刪除文件,而默認的
--delete則是在generator剛啓動時刪除第一個文件列表中的待刪除文件)
在傳輸以前執行刪除對於文件系統空間緊俏時是頗有幫助的。可是,因爲它會在傳輸開始之
前發起一段延遲,這一段延遲極可能會使得傳輸超時(若是指定了"--timeout"選項),還會
強制rsync使用老的、非增量的遞歸算法,此算法要求rsync將全部傳輸中的文件一次性掃描
到內存中。
--delete-during, --del
請求receiver端的文件刪除行爲是隨着文件傳輸時逐步執行的。隱含了"--delete"選項。
(譯者注:"--delete"沒有和"--delete-WHEN"同時使用時,"--delete"默認採用的就是
"--delete-during")
--delete-delay
請求receiver端的文件刪除行爲在全部文件列表中的文件都所有傳輸完成後才刪除。在結
合"--delay-updates"、"--fuzzy"選項一塊兒使用時比較有用,而且相比"--delete-after"
來講效率更高。
--delete-after
請求receiver端的文件刪除行爲在全部文件列表中的文件都所有傳輸完成後才刪除。和
"--delete-delay"不一樣的是,該選項會採用老的、非增量傳輸的算法將傳輸中的全部文件
一次性掃描到內存中,所以效率不高。
--delete-excluded
爲了刪除sender端沒有而receiver端有的文件,能夠指定該選項告訴rsync即便文件被
"--exclude"排除了,也要在遠程將其刪除。
--ignore-errors
告訴"--delete",即便在遇到I/O錯誤時也要繼續。
--force
該選項告訴rsync,當某個非空目錄要被非目錄文件替換時,將此非空目錄刪除掉。這隻有
在刪除行爲未激活時纔有效。
--max-delete=NUM
限制rsync最多能刪除NUM個文件或目錄,若是突破了該限制,將輸出警告信息並以狀態碼
25退出。
可使用"--max-delete=0"來保證不會在遠程刪除任何文件,由於只要有刪除行爲,就會
警告並退出。
--max-size=SIZE
限制rsync傳輸的最大文件大小。可以使用單位後綴,還能夠是一個小數值(例如:
"--max-size=1.5m")。
該選項是一個傳輸規則,而不是排除規則,所以不會影響文件進入文件列表,也所以不會影
響刪除行爲。它僅僅只是限制了receiver端請求傳輸的文件。
有以下可用後綴:"K"("KiB")=1024字節、"M"("MiB")、"G"("GiB")。若是想使用1000做爲
換算單位,則使用KB、MB、GB。(注意,全部大寫字母均可以使用小寫字母替換)。最後,如
果後綴以"+1"或"-1"結尾,則值表示減少或增大一個字節。
例如:"--max-size=1.5mb-1"表示1499999字節,"--max-size=2g+1"表示2147483649字節。
--min-size=SIZE
限制rsync傳輸的最小文件大小。這能夠用於禁止傳輸小文件或那些垃圾文件。單位的指定
方法同"--max-size"。
-B, --block-size=BLOCKSIZE
該選項強制修改rsync算法將文件劃分爲數據塊時的塊大小。通常基於正在更新的文件來選
擇大小值。詳細信息見技術報告。
(譯者注:rsync算法的做者說塊大小在500-1000時是比較好的選擇。對於超過1M的文件絕對
不要讓塊大小低於500,不然性能極低。)
-e, --rsh=COMMAND
該選項容許你選擇用於本地和遠程之間的通訊的遠程shell程序。通常狀況下,rsync默認配
置爲使用ssh,但若是在本地網絡上,你可能更喜歡使用rsh。
若是該選項和格式[user@]host::module/path一塊兒使用,則該遠程shell命令會在遠程主機
上啓動一個rsync daemon(譯者注:能夠認爲是臨時模
擬的rsync daemon進程),而且全部數據都將經過此遠程shell的鏈接傳輸,而不是經過網絡
套接字所鏈接的遠程主機上的rsync daemon。見上文"經過遠程SHELL鏈接使用RSYNC-DAEMON
特性"。
容許在COMMAND中提供多個遠程shell參數,它們將會做爲一個總體傳遞給rsync。多個參數
必須使用空格(不能是製表符tab或其餘任意空白字符),分隔,也可使用單引號或雙引號
包圍參數來保護空格(但不能使用反斜線)。注意在單引號字符串內部使用多個單引號將返
回給你一對單引號,同理,雙引號也同樣(儘管你須要注意哪些引號是shell來解析的,哪
些引號是rsync解析的)。例如:
-e 'ssh -p 2234'
-e 'ssh -o "ProxyCommand nohup ssh firewall nc -w1 %h %p"'
(注意,能夠在用戶家目錄下的.ssh/config文件中自定義ssh的鏈接選項。)
你也可使用RSYNC_RSH環境變量指定遠程shell程序,它能接受和"-e"選項同樣的值。
另外請查看會影響該選項的"--blocking-io"選項。
--rsync-path=PROGRAM
指定遠程機器上要運行的程序以啓動遠程rsync進程。當遠程rsync程序不在默認目錄
/usr/local/bin/rsync下常會使用該選項指定其路徑。但要注意,PROGRAM是在shell
的幫助下運行的,所以它能夠是任意程序、腳本或你想運行的命令序列,只要它們不
會破壞rsync正在使用的標準輸入和標準輸出便可。
一個很棘手的例子是在遠程機器上設置不一樣的默認目錄以便使用"--relative"選項。例如:
rsync -avR --rsync-path="cd /a/b && rsync" host:c/d /e/
(譯者注:以上示例將會在本地主機建立/e/c/d,其中c/d數據來源於遠程主機的/a/b/c/d)
-C, --cvs-exclude
這是一個頗有用的簡寫排除文件法,用於排除大量不但願在系統之間傳輸的文件。它使用了
相似於CVS的算法來決定一個文件是否要被忽略。
exclude列表被初始化爲排除如下格式的文件(這些初始化條目被標記爲易過時,見後文"篩
選規則"段落的說明):
RCS SCCS CVS CVS.adm RCSLOG cvslog.* tags TAGS .make.state .nse_depinfo
*~ #* .#* ,* _$* *$ *.old *.bak *.BAK *.orig *.rej .del-* *.a *.olb *.o
*.obj *.so *.exe *.Z *.elc *.ln core .svn/ .git/ .hg/ .bzr/
而後,$HOME/.cvsignore文件中的文件列表將會被添加到此exclude列表,此外還會包含
CVSIGNORE環境變量中指定的全部文件(全部cvsignore名稱由空白字符分隔)
最後,和.cvsignore文件在同一個目錄中的文件,若是它們能匹配此文件中列出的規則,則
也會被排除。不像rsync的篩選/排除規則,這些匹配模式是使用空白字符分隔的。更多cvs
的模式見cvs(1)的man文檔。
若是將"-C"選項結合"--filter"規則,須要記住,不管"-C"選項處於命令行的哪些位置,這
些cvs排除規則都將會追加在你所指定的規則以後。這就使得"-C"選項指定的規則比你自行
指定的規則優先級耕地。若是你想將CVS規則插入到你的篩選規則中的某個位置,那麼就不
要使用"-C"選項,而是使用一種結合方式:"--filter:C"或"--filter=-C"。前者啓用
.cvsignore文件中的規則進行每目錄掃描,後者則是一次性導入全部上面說所的CVS規則。
-f, --filter=RULE
該選項可讓你添加規則,以便從待傳輸的文件列表中有選擇性地排除某些文件。在遞歸傳
輸中,結合該選項是很是有用的。
你能夠在命令行中使用任意多個"--filter"選項以創建要排除的文件列表。若是篩選規則中
包含了空白字符,須要使用引號包圍以防被shell解析。在下文中一樣介紹瞭如何使用下劃
線替代空格來分隔rsync參數和規則。
該選項的詳細信息請參見"篩選規則"段落說明。
-F 該選項是一種添加到"--filter"規則的簡寫法,只有兩種可能:第一種是單個"-F"選項,此
時它是如下規則的簡寫:
--filter='dir-merge /.rsync-filter'
這告訴rsync查找那些分散在目錄結構中的全部.rsync-filter文件,而後使用這些規則篩選
出傳輸中的文件。第二種是若是重複使用"-F"選項,則它是如下規則的簡寫:
--filter='exclude .rsync-filter'
該規則將從傳輸中篩選出.rsync-filter自己。
關於該選項如何工做的更詳細信息,見"篩選規則"段落說明。
--exclude=PATTERN
該選項是"--filter"選項的簡化格式,默認爲排除(exclude)規則,而且它將禁止對普通的
篩選規則進行解析。
更詳細信息見"篩選規則"段落說明。
--exclude-from=FILE
該選項和"--exclude"選項相似,可是它是從包含了排除規則的文件中讀取排除規則(每行一
個規則)。空行以及";"或"#"開頭的行爲註釋行,若是給定的文件爲"-",則表示從標準輸入
中讀取排除規則。
--include=PATTERN
該選項是"--filter"選項的簡化格式,默認爲包含(include)規則,而且它將禁止對普通的
篩選規則進行語法解析。
更詳細信息見"篩選規則"段落說明。
--include-from=FILE
該選項和"--exclude"選項相似,可是它是從包含了排除規則的文件中讀取排除規則(每行一
個規則)。空行以及";"或"#"開頭的行爲註釋行,若是給定的文件爲"-",則表示從標準輸入
中讀取排除規則。
--files-from=FILE
該選項能夠在FILE中精確指定要傳輸的文件列表。若是FILE爲"-"則表示從標準輸入中讀取
文件列表。它還調整了rysnc的默認行爲以便可以更簡單地指定要傳輸的文件:
o 它隱含了"--relative"(-R)選項,因此會保留在文件中每一個條目所指定的路徑信息。
(使用"--no-relative"或"--no-R"關閉該功能)
o 它隱含了"--dirs"(-d)選項,因此將在目標主機上建立列表中指定的目錄而不是悄
悄地跳過它們。(使用"--no-dirs"或"--no-d"關閉該功能)
o "--archive"(-a)將再也不隱含"--recursive"(-r),所以若是真的要遞歸到目錄中,
須要顯式指定"--recursive"(-r)。
o 它的反作用是改變了rsync的默認狀態,所以"--files-from"選項在命令行中的位置
和其它選項的解析無關(例如,"-a"選項放在"--files-from"選項的先後的工做方式
是同樣的)。
從FILE中讀取的全部文件名都是相對於源目錄的相對路徑,任何前導斜線都會被移除,也
沒法使用".."進入源目錄的上一層次目錄。例如:
rsync -a --files-from=/tmp/foo /usr remote:/backup
若是/tmp/foo中包含了字符串"bin"或"/bin",將在遠程主機上建立/backup/bin做爲
/usr/bin所對應的目標文件。若是包含了字符串"bin/"(注意尾隨斜線),則將傳輸
/usr/bin目錄以及其內的文件。若是指定了"-r"選項,則全部目錄結構都會被傳輸
(要記住當使用了"--files-from"時,"-r"選項須要顯式指定,由於"-a"選項再也不隱
含該選項)。還要注意,適用"--files-from"時,"--relative"選項的默認行爲是僅
複製從文件中讀取的路徑信息,再也不強制複製原規範路徑(即此示例中的/usr)
另外,"--files-from"的文件能夠從遠程主機上讀取,而不必定要從本地主機上讀取,
需只在文件的前面指定"host:"便可。要求"host:"的host必須是rsync兩端的某一端,
爲了簡寫,可使用簡寫的前綴":"表示遠端主機。例如:
rsync -a --files-from=srchost:/path/file-list srchost:/ /tmp/copy
rsync -a --files-from=:/path/file-list srchost:/ /tmp/copy
這將會拷貝在遠程主機"srchost"上/path/file-list文件中指定的全部文件。
注意:對"--files-from"的文件進行排序可使得rsync效率更高,由於它將使得rsync不
用再從新讀取相鄰能共用的路徑元素。若是不進行排序,則rsync可能會屢次從新掃描路徑
元素(隱含目錄),重複生成文件列表。
-0, --from0
告訴rsync從文件中讀取規則或文件名時是以空字符(\0)終止的。該選項會影響
"--exclude-from"、"--include-from"、"--files-from"以及全部在"--filter"
中指定的規則合併文件。它不會影響"--cvs-exclude"(由於從.cvsignore文件中
讀取的名稱都是以空白字符分隔的)。
-s, --protect-args
該選項將使得全部發送給遠程rsync進程的文件名和大多數選項都不容許被遠程shell解析。
這意味着空格再也不分隔文件名,任意非通配特殊字符都不會被翻譯(即成爲普通字符,
如:~、$、;、&等)。通配字符將被遠程主機上的rsync擴展(正常狀況下是由遠程shell來
擴展的)。
-T, --temp-dir=DIR
該選項明確receiver端文件重組時的臨時目錄。默認狀況下,receiver端將在文件所在目
錄中建立臨時文件。
在receiver端,若是目標文件所在磁盤分區剩餘大小不足以存儲待重組文件時,可使用
該選項將臨時文件存儲到其餘的分區中,在這種狀況下,因爲建立的臨時文件和目標路徑
不在同一個分區上,因此重組完成時沒法直接重命名,而是隻能從臨時目錄中拷貝到目標
路徑下。
若是你使用該選項的緣由不是磁盤空間不足,你可能要將此選項結合"--delay-updates"選
項一塊兒使用,這將保證全部拷貝的文件都放入目標層次結構的子目錄中,並等待傳輸結束。
-y, --fuzzy
該選項告訴rsync,若是目標主機上的basis file缺失,將主動搜索出一個文件做爲basis
file。目前的算法是在同一目錄中模糊搜索目標basis file,搜索的規則是:要麼文件大小
和修改時間徹底一致,要麼文件名類似。若是搜索到了符合條件的文件,rsync將使用該文
件做爲basis file,這樣可能會加速傳輸速度。
(譯者注:在目標主機上進行文件重組時,會從basis file中拷貝匹配塊,在真正的basis
file缺失時,模糊搜索出的basis file可能能提供一些匹配塊,從而減小sender要發送的
數據量,加快整個同步過程)
注意,若是使用了"--delete"選項,可能會把潛在的basis file給刪除掉,所以要想避免
種這狀況,能夠指定"--delete-after"選項,或者直接指定文件名來排除將被刪除的文件。
--compare-dest=DIR
該選項指示rsync使用目標主機上的DIR做爲額外的層次結構,以便和傳輸中的文件作比較
(若是目標目錄中不存在basis file)。若是在DIR中發現了和sender端徹底一致的文件,則
該文件將不會傳輸到目標目錄中。該選項在作稀疏備份時頗有用,由於它僅備份從某一次
更早的備份開始發生了改變的文件。(譯者注:以備份目錄爲比較目錄DIR,同步時將比較
該目錄中的文件,最終將僅傳輸發生了改變的文件到目標目錄下)
從rsync 2.6.4版本開始,能夠經過多個"--compare-dest"選項提供多個比較目錄,使得
rsync能夠按照爲了精確匹配而指定的順序來搜索列表。若是發現能匹配上但僅只有屬性不
同,將生成一個本地副本而後更新這些屬性信息。若是未能匹配上,將選擇DIRs中的basis
file來提升傳輸速度。
若是DIR是相對路徑,它將是相對於目標目錄的。見"--copy-dest"和"--link-dest"。
--copy-dest=DIR
該選項相似於"--compare-dest",但rsync會從DIR中以本地拷貝的方式拷貝未改變的文件
到目標目錄中。
能夠經過多個"--copy-dest"選項提供多個DIR,使得rsync能夠按照爲了匹配未修改文件的
順序來搜索列表。若是未匹配上,則選擇DIR中的basis file以嘗試提升傳輸速度。
若是DIR是相對路徑,它將是相對於目標目錄的。見"--copy-dest"和"--link-dest"。
--link-dest=DIR
This option behaves like --copy-dest, but unchanged files are hard linked from
DIR to the destination directory. The files must be identical in all preserved
attributes (e.g. permissions, possibly ownership) in order for the files to be
linked together. An example:
rsync -av --link-dest=$PWD/prior_dir host:src_dir/ new_dir/
If file’s aren’t linking, double-check their attributes. Also check if some
attributes are getting forced outside of rsync’s control, such a mount option
that squishes root to a single user, or mounts a removable drive with generic
ownership (such as OS X’s "Ignore ownership on this volume" option).
Beginning in version 2.6.4, multiple --link-dest directories may be provided,
which will cause rsync to search the list in the order specified for an exact
match. If a match is found that differs only in attributes, a local copy is
made and the attributes updated. If a match is not found, a basis file from
one of the DIRs will be selected to try to speed up the transfer.
This option works best when copying into an empty destination hierarchy, as
rsync treats existing files as definitive (so it never looks in the link-dest
dirs when a destination file already exists), and as malleable (so it might
change the attributes of a destination file, which affects all the hard-linked
versions).
Note that if you combine this option with --ignore-times, rsync will not
link any files together because it only links identical files together as
a substitute for transferring the file, never as an additional check after
the file is updated.
If DIR is a relative path, it is relative to the destination directory. See
also --compare-dest and --copy-dest.
Note that rsync versions prior to 2.6.1 had a bug that could prevent --link-dest
from working properly for a non-super-user when -o was specified (or implied
by -a). You can work-around this bug by avoiding the -o option when sending to
an old rsync.
-z, --compress
使用該選項,rsync將對發送給目標主機的文件數據(file data)進行壓縮,這能夠減小傳輸
的數據量——在某些緩慢的鏈接中可能比較適用。
注意,該選項通常狀況下能夠實現比經過遠程shell壓縮或傳輸過程壓縮得到更好的壓縮比,
由於它利用了明確不經過鏈接發送的匹配數據塊中的隱含信息。
請經過"--skip-compress"選項肯定不被壓縮的默認文件後綴列表。
--compress-level=NUM
顯式指定"--compress"的壓縮級別。若是NUM爲非零值,則該選項將隱含"--compress"。
--skip-compress=LIST
該選項經過指定後綴格式來決定哪些文件不被壓縮。LIST的值爲使用斜槓"/"分隔的一個或
多個文件後綴(不包括點.)
若是LIST指定的是空字符串,則表示壓縮全部文件。
支持簡單的字符類匹配。所謂的字符類由中括號和寫在中括號中的一系列的字母組成(如:
非特殊的字符類[abcz],特殊的字符類[:alpha:],注意,短橫線"-"在此沒有特殊的意義,
僅表示一個簡單的字符)。
注意,字符"*"和"?"沒有特殊的意義。
例如此處示例指定了6個不壓縮的後綴(由於其中一個規則mp[34]匹配了兩種後綴):
--skip-compress=gz/jpg/mp[34]/7z/bz2
默認不被壓縮的後綴列表爲:(不一樣版本的rsync可能會有些微改變)
7z avi bz2 deb gz iso jpeg jpg mov mp3 mp4 ogg rpm tbz tgz z zip
該後綴列表將會被"--skip-compress"選項指定的後綴列表覆蓋,但有一種狀況例外:以
rsync daemon爲源拷貝文件時,rsync將在不被壓縮的文件列表中增長你指定的後綴文件(
而且該文件列表可能會被配置爲非默認狀況)(譯者注:也就是說,當從rsync daemon拷貝
時,指定的壓縮忽略後綴不是覆蓋原壓縮忽略列表,而是追加到原壓縮忽略列表)。
--numeric-ids
使用該選項後,rsync將傳輸gid和uid,而不是字符格式的username和groupname而後將其
映射到兩端。
默認狀況下,rsync將使用用戶名和組名來決定如何設置文件的全部者和所屬組。但要注
意,即便沒有指定"--numeric-ids"選項,也毫不會經過字符格式的username和groupname
來映射特殊的uid=0和gid=0。
若是在源主機上的用戶或組沒有字符格式的名稱(譯註:即只有uid和gid,沒有username
和groupname),或者目標主機上沒有相同的用戶/組,則將使用uid/gid來設置全部權關係。
請參看rsyncd.conf的man文檔中關於"use chroot"的設置說明,以獲取關於chroot設置後
如何影響rsync對用戶名和組名的查找能力以及你能對此作些什麼。
--timeout=TIMEOUT
該選項設置的是最大IO超時時間,單位爲秒。若是在指定時間內沒有數據被傳輸,則rsync
將直接退出。默認值爲0表示永不超時。
--contimeout
該選項設置rsync成功鏈接rsync daemon的等待超時時間。若在指定時間內未鏈接上rsync
daemon,rsync將以錯誤方式退出。
--address
默認當rsync鏈接rsync daemon時,rsync所使用的地址將會綁定到通配符地址上(譯註:默
認通配符地址爲0.0.0.0,便可以從任意接口的任意地址上向外發起鏈接)。使用該選項能夠
明確指定rsync要綁定的IP地址或主機名。請一樣參見"--daemon"模式中"--address"選項獲
取詳細信息。
--port=PORT
該選項能夠顯式指定一個要使用的tcp端口號而不是默認的873端口。該選項只能在鏈接rsync
daemon時的雙冒號(::)的語法格式中使用(由於URL rsync://user@host:port/語法自己就可
以指定端口號,因此不須要該選項明確指定)。請一樣參見"--daemon"模式中"--port"選項獲
取詳細信息。
--sockopts
這個選項能夠爲但願最大程度地調整系統的人們提供無窮樂趣。你能夠設置各類套接字選項
使得傳輸速度更快(或更慢!)。關於該選項的可設置項請閱讀setsockopt()系統調用man文
檔。默認狀況下,該選項沒有設置任何值。該選項隻影響使用套接字鏈接rsync daemon的情
況。在"--daemon"模式中也有該選項。
--blocking-io
該選項告訴rsync在啓動遠程shell傳輸時使用阻塞I/O模型。若是遠程shell爲rsh或remsh,
rsync默認使用阻塞I/O,不然默認將使用非阻塞I/O。(注意,ssh更適合使用非阻塞I/O)
-i, --itemize-changes
請求輸出一個明細列表,這個列表記錄的是每一個文件發生了哪些改變,包括屬性的改變。它
徹底等價於"--out-format='%i %n%L'"。若是重複該選項,未發生改變的文件也會被輸出。
由於幾乎不用,因此不作翻譯。
--out-format=FORMAT
該選項容許你自定義rsync client對每一個更新過程產生輸出的信息格式。指定的格式爲"%"
加一個單字符。若是指定了"-v"選項,則其默認的格式爲"%n%L"(將輸出文件名,若是是一
個連接文件,則輸出其指向的對象)。完整的格式列表,見rsyncd.conf的man文檔中"log
format"段落。
指定"--out-format"是對每一個文件、目錄等都輸出信息的。
rsync將在文件傳輸以前輸出這些信息,除非請求輸出傳輸過程當中的統計信息,這樣它會在
文件傳輸結束前輸出信息,在這種狀況下若是同時指定了"--progress"選項,rsync將會同
時輸出正在傳輸中的文件名。
--log-file=FILE
請求將輸出信息記錄到文件中。相似於"--out-format"。它能夠指定記錄client以及非
daemon的server端的日誌。若在客戶端的命令行上指定該選項,則默認格式爲"%i %n%L"。
如下是一個請求遠端來記錄日誌的示例:
rsync -av --rsync-path="rsync --log-file=/tmp/rlog" src/ dest/
該選項對於調試非預期的鏈接關閉比較有用。
--log-file-format=FORMAT
該選項指定要在"--log-file"文件中記錄的日誌格式(固然,需配合"--log-file"才生效)。
若是FORMAT指定爲空,將不會記錄更新的文件信息。完整的格式列表,見rsyncd.conf的
man文檔中"log format"段落。
--stats
該選項讓rsync打印文件傳輸過程當中的詳細統計數據,從中能夠看出增量算法的效率如何。
統計數據包括以下幾項:
o Number of files是全部"文件"的數量總數,包含目錄、字符連接等。
o Number of files transferred是普通文件經過rsync增量傳輸算法更新的數據大小,
它不包括建立的目錄、字符連接等非文件數據。
o Total file size是傳輸中全部文件總大小。該大小不會計算目錄和特殊文件大小,
但會包含字符連接的大小。
o Total transferred file size是全部已傳輸文件的總大小。
o Literal data是全部非匹配數據塊的數據大小,即傳輸給receiver端的純文件數據
大小。
o Matched data是全部匹配塊的數據總大小,即receiver端從basis file中拷貝的數
據大小。
o File list size是sender發送給receiver端的文件列表大小。它比內存中文件列表的
內容要小不少,由於sender將其傳輸給receiver端的時候會將其進行壓縮。
o File list generation time是sender建立文件列表消耗的時間,單位爲秒。老版本
的rysnc可能不會輸出該項。
o File list transfer time是sender將文件列表發送給receiver端消耗的時間,單位秒。
o Total bytes sent是rsync從sender端傳輸給receiver端的全部數據大小,單位字節。
(譯者注:包括純文件數據,信息數據等等非文件數據)
o Total bytes received是receiver端收到的全部非信息數據大小,單位字節。
-8, --8-bit-output
告訴rsync在輸出信息中保留全部高位字符不進行轉義。幾乎用不上,因此不作翻譯。
-h, --human-readable
以人類可讀方式輸出信息。若是隻指定單個該選項,則K/M/G的轉換單位爲1000,指定屢次,
則轉換單位爲1024。
--partial
默認rsync在傳輸中斷時會刪除只傳輸了一部分不完整文件(partial file)。在某些環境下,
可能但願保留這些已傳輸的部分。"--partial"選項告訴rsync保留這些部分,這可使得下
一次傳輸只傳輸剩餘部分,從而加快傳輸速度。
--partial-dir=DIR
比直接使用"--partial"更好的作法是指定一個存放不完整數據(partial file)的目錄DIR,
下次再傳輸時,rsync將使用一個文件來尋找到該DIR中的文件,以便提升傳輸速率,當數據
真正傳輸完整且傳輸真正完成後,該DIR將被刪除。
注意,若是指定了"--whole-file"選項(後者隱含了該選項),則全部的"partial-dir"中正
在更新的文件都會被刪除,由於rsync此時沒有使用增量傳輸算法來傳輸文件。
rsync若是發現DIR不存在,則自動建立(但不是遞歸建立整個目錄路徑),這使得rsync在需
要時能更方便地使用相對路徑在文件所在目錄下直接建立partial-dir
(例如"--partial-dir=.rsync-partial"),而且在partial file被刪除時自動移除該目錄。
若是partial-dir的值不是一個絕對路徑,rsync將在全部exclude規則尾部追加一個exclude
規則,用於防止partial file已經存在於sender端,也能防止receiver端過早刪除partial
file。例如:"--partial-dir"將在其餘篩選規則的尾部添加一個等價於
"-f 'P .rsync-partial/'"的規則。
若是你正在使用自定義的exclude規則,你可能須要在你的exclude/hide/protect規則中添
加partial-dir相關的條目,由於(1)向其餘規則的尾部自動添加規則的行爲可能會失效(2)
你可能但願覆蓋rsync的排除選擇。例如,若是你想讓rsync清除被隨意亂放置的剩餘partial
file,須要指定"--delete-after"而且添加一條"risk"篩選規則,如
"-f 'R .rsync-partial/'"(不要使用"--delete-before"或"--delete-during",除非你不想
讓rsync使用剩餘的partial file來完成這次傳輸)。
重要:"--partial-dir"目錄不能讓其餘用戶可寫,不然有安全隱患。例如避免使用"/tmp"。
你也能夠經過環境變量"RSYNC_PARTIAL_DIR"來設置partial-dir的值。設置該環境變量不會
強制開啓"--partial",但在指定了"--partial"時會影響它的partial-dir路徑。例如,不
再讓"-partial-dir=.rsync-tmp"隨同"--progress"一塊兒使用,而是設置
"RSYNC_PARTIAL_DIR=.rsync-tmp",而後只需使用"-P"選項來應用".rsync-tmp"目錄以完成
partial傳輸。只有在如下狀況下"--partial"不會查找該環境變量的值:
(1)使用了選項"--inplace"(由於"--inplace"和"--partial-dir"選項衝突)
(2)使用了選項"--delay-updates"(見下文)。
--delay-updates
該選項將receiver端每一個重組的臨時文件保留在某個目錄中,直到傳輸結束以前才一次性將
它們所有重命名爲各自對應的目標文件。這樣的行爲使得全部文件的更新更具備原子性
(譯註:若是你瞭解數據庫事務,就知道原子性是什麼意思,最直白地說,具備原子性表示
要麼所有成功,要麼所有失敗,因此這裏更新具備原子性表示要麼所有更新成功,要麼所有
更新失敗,但因爲重命名覆蓋目標文件後是不可回滾的,因此這裏的原子性並非那麼的嚴
格)。默認狀況下,這些臨時文件將放在每一個目標文件所在目錄下的".~tmp~"子目錄下,但
若是指定了選項"--partial-dir",那麼將使用該選項指定的目錄。請參見"--partial-dir"
選項獲取相關信息。該選項和"--inplace"以及"--append"選項衝突。
該選項使得receiver端使用更多的內存空間,而且須要更多的磁盤空間以存儲額外的目標文
件副本。須要注意,"--partial-dir"不能使用絕對路徑,除非你能保證傳輸中的文件沒有
同名文件(由於若是使用了絕對路徑,全部的臨時文件都放在那一個目錄下,重名文件會先
後覆蓋),且在目錄層次結構中沒有掛載點(由於若是沒法重命名到指定路徑下,延遲更新將
失敗)
-m, --prune-empty-dirs
該選項告訴receiver端的rsync從文件列表中刪除空目錄,包括那些沒有文件的空的嵌套目
錄。這對於避免建立一堆無用的目錄頗有用,例如在sender端使用include/exclude/filter
規則掃描遞歸層次時會建立全部層次的目錄。
注意傳輸規則(如"--min-size")不會影響文件進入文件列表,所以不會讓目錄成爲空目錄,
即便目錄中沒有任何文件能夠匹配上傳輸規則。
因爲該選項會修剪file list,因此會影響delete對目錄的刪除行爲。但記住,exclude排除
的文件和目錄能夠防止現有條目被刪除,由於排除規則既隱藏了源文件,又保護了目標文件。
可使用全局"protect"篩選規則防止file list中的某個特定目錄被修剪。例如,下面的選
項能夠保證目錄"emptydir"仍然保留在file list中:
--filter ’protect emptydir/’
如下的示例能夠從一個層次結構中拷貝其中全部的.pdf文件,而且只在目標主機上建立必
要的目錄來存放這些.pdf文件,並會移除目標上全部多餘文件和目錄(注意此處使用了非目
錄文件的hide篩選規則替代exclude規則):
rsync -avm --del --include=’*.pdf’ -f ’hide,! */’ src/ dest
若不想刪除目標主機上多餘文件,可以使用更古老的選項"--include='*/' --exclude='*'"
替代hide篩選規則,不過你不必定能適應它,畢竟它是古老的選項。
--progress
該選項告訴rsync顯示傳輸進度信息,這是給那些無聊的用戶看的。它隱含了"--verbose"。
若是rsync正在傳輸的是一個普通文件,將如下面格式顯示進度信息:
782448 63% 110.64kB/s 0:00:04
在此例中,receiver重組了sender發送的文件的782448字節的數據或者說重組了該文件的
63%(譯者注:此處的意思是這些數據是文件的純數據,不包括那些非文件信息類數據),且
以110.64kB/s的速率重建文件,若是保持該速率,該文件將在4秒後重建完成。
若使用的是rsync的增量拷貝算法,那麼這些統計數據可能會誤導用戶。例如,若是sender
的文件由basis file和另外一段放在basis file前面的數據組成,那麼當reciever在獲取純文
件數據時,此處所顯示的速率值會急劇降低,並且要完成傳輸可能會比估計的時間更長,因
爲它還要處理匹配的數據塊部分。(譯者注:換句話說,該進度信息是sender發送的純數據
相關信息,和真正完成同步的進度沒有直接關係)
當文件傳輸完成,rsync將使用總結性的行替代進度信息,相似格式以下:
1238099 100% 146.38kB/s 0:00:08 (xfer#5, to-check=169/396)
此示例中,文件大小爲1238099字節,總體傳輸平均速率是146.38kB/s,總共消耗了8秒才傳
輸完成。"xfer#5"表示此文件是該rsync會話期間第5個傳輸的文件,"to-check=169/396"表
示這次傳輸的文件列表中共要檢查396個文件,其中有169個文件待檢查以肯定它們是否須要
傳輸。
(譯者注:能夠認爲396是某些文件被排除後待考慮是否傳輸的總文件數,196則是還剩下196
個文件還未檢查)
-P 該選項等價於"--partial --progess"選項。指定這兩個選項的目的是爲了讓某一次可能會
中斷的較長傳輸過程變得更簡單。
--password-file
該選項讓rsync在鏈接rsync daemon時從密碼文件中獲取密碼。密碼文件必須可讀。該文件
中只有第一行是rsync將讀取的密碼,其餘全部行都自動忽略。
該選項沒法爲遠程shell(如ssh)提供密碼,至於如何爲遠程shell提供密碼,參考對應遠程
shell的文檔(譯者注:對於ssh而言,使用公鑰認證機制便可)。當使用遠程shell訪問rsync
daemon時,該選項只有完成了遠程shell的身份驗證過程才生效。
--list-only
該選項強制rsync僅列出源路徑的文件列表而不是進行文件傳輸。若是rsync命令行中只給出
了一個地址,將隱含該選項。注意通配符會被shell解析並擴展爲rsync的參數。例如:
rsync -av --list-only foo* dest/
--bwlimit=KBPS
該選項對rsync的傳輸最大速度進行限速。該限制值是一個平均值,因此在實際傳輸過程當中
可能會短暫的超出該限制值。設置爲0則表示不限速。
--write-batch=FILE
記錄一個稍後被"--read-batch"讀取的文件,該文件可被用於另外一個徹底一致的目標路徑。
詳細信息見"批處理模式"段落信息。
(譯者注:通俗地說,就是將源和目標的不一樣點記錄下來保存在FILE中,而後經過
"--read-batch"讀取這些不一樣點並更新目標文件,若是有多臺目標主機上的文件情
況是徹底一致的,則能夠經過此FILE一次性應用於全部這些主機,所以稱之爲"批
處理模式"。注意,FILE中不只記錄了不一樣之處,還記錄了將要應用於目標主機的
數據部分,所以它是一個"信息+數據"文件而不只僅只是小小的信息文件)
--only-write-batch=FILE
和"--write-batch"工做方式相似,區別是當生成batch file的時候不會對目標路徑作
任何操做。這使得你能夠經過某些方法將所發生改變的信息傳輸到目標系統上,而後通
過"--read-batch"應用這些改變。
能夠直接將批處理文件FILE保存到任意的移動存儲設備中。
注意,只有向遠程主機推送這些改變時才能節省帶寬,由於這樣可讓sender端的數據分
流記錄到FILE中,而無需經過鏈接傳輸給receiver端。(若是是拉取數據,則sender端爲
remote,所以沒法寫批處理文件FILE)
--read-batch=FILE
讀取全部經過"--write-batch"生成的批處理文件FILE並經過其中的"信息+數據"應用於目
標主機。若是FILE未"-",則批處理數據將從標準輸入中讀取。
--protocol=NUM
強制指定要使用的協議版本。通常只在建立批處理文件以兼容老版本rsync時可能會用上,
所以不作翻譯。
--iconv=CONVERT_SPEC
rsync能夠在不一樣字符集間轉換文件名。基本用不會上,所以不作翻譯。
-4, --ipv4 or -6, --ipv6
限制rsync使用ipv4仍是ipv6建立套接字。該選項因爲明確表示了要用網絡套接字,也就限
制了只有鏈接rsync daemon時才生效。
若是編譯rsync時沒有將ipv6的功能編譯進去,則"--ipv6"無效。經過"--version"的輸出
結果能夠知道是否編譯了ipv6功能。
--checksum-seed=NUM
指定checksum的種子長度。默認種子長度爲4字節,應用於每一個數據塊級和文件級checksum
的計算。默認checksum的種子由server和其默認的當前系統時間time()計算生成。該選項顯
示指定特定的checksum種子,對應想要重複計算塊級或文件級checksum時或者用戶想要一個
更具隨機性的checksum種子時比較有用。設置NUM爲0將致使rsync使用默認的time()來計算
種子。
DAEMON OPTIONS
當啓動rsync daemon時,能夠指定如下幾個選項:
--daemon
該選項告訴rsync以daemon方式運行。
能夠在client端使用host::module or rsync://host/module/格式的命令來訪問daemon。
若是標準輸入是一個套接字,則rsync被認爲是經過inetd方式運行的,不然它將從當前終
端上分離出來併成爲後臺守護進程。每次和daemon進行鏈接時,daemon都會讀取配置文件
(rsyncd.conf)並給出對應的相應。更詳細信息見rsyncd.conf的man文檔。
--address
rsync daemon的綁定地址,默認會綁定在通配地址上(默認爲0.0.0.0)。使用"--address"
選項能夠顯式指定要綁定的IP地址或主機。能夠配合"--config"一塊兒使用來實現rsync虛
擬主機的功能。更多信息見rsyncd.conf的man文檔中"address"段落說明。
--bwlimit=KBPS
該選項對rsync的傳輸最大速度進行限速。該限制值是一個平均值,因此在實際傳輸過程當中
可能會短暫的超出該限制值。設置爲0則表示不限速。
--config=FILE
該選項用於指定額外的配置文件來代替默認的配置文件,只有和"--daemon"選項同時使用
時纔有效。默認daemon的配置文件爲/etc/rsyncd.conf,除非是經過遠程shell啓動的臨時
daemon,使用遠程shell鏈接的daemon的默認配置文件是當前目錄(通常是$HOME)下的
rsyncd.conf。
--no-detach
當以daemon形式運行時,該選項表示rsync不從終端中將本身分離出來,因此工做在前臺。
在各類daemon管理工具如daemontools、systemd上須要使用。若是rsync是由sshd或inetd
派生出來的話,則該選項無效。
--port=PORT
指定daemon的監聽端口,默認爲873。
--log-file=FILE
該選項告訴rsync daemon使用此處指定的日誌文件替代配置文件中"log file"指定的日誌
文件。
--log-file-format=FORMAT
該選項告訴rsync daemon使用此處指定的日誌格式而不是配置文件中"log format"指定的
日誌格式。該選項會自動開啓"transfer logging",除非它的值爲空,由於這樣表示關閉
transfer logging功能。
--sockopts
指定套接字選項,將覆蓋配置文件配置的套接字選項。
-v, --verbose
該選項輸出rsync daemon啓動時的詳細信息。它不控制客戶端和daemon鏈接時的信息詳細
程度,由於這些信息詳細程度是由client和模塊配置段中的"max verbosity"控制的。
-4, --ipv4 or -6, --ipv6
告訴rsync使用IPV4仍是IPV6建立套接字,而後rsync daemon將監聽在對應的地址類型上。
若是編譯rsync時沒有將ipv6的功能編譯進去,則"--ipv6"無效。經過"--version"的輸出
結果能夠知道是否編譯了ipv6功能。
-h, --help
若是該選項指定在"--daemon"選項以後,則輸出rsync daemon可用選項的簡短幫助信息。
FILTER RULES
(譯者注:下面篩選規則的內容不少地方都提到了"傳輸中根目錄"(transfer-root)的概念,因此提早
在此作個解釋。假設執行rsync -r /www/lvm /www/audit remote_host:/path命令,則待傳輸的目錄
lvm和audit稱爲傳輸過程當中的根目錄,即頂級目錄)
篩選規則能夠彈性定義哪些文件須要傳輸(include)(譯者注:前文中出現的傳輸規則指的就是
include規則),以及哪些文件須要跳過(exclude)。這些規則要麼直接指定include/exclude匹配
模式,要麼指定一種方式從中獲取include/exclude匹配模式(例如從文件中讀取規則)。
對於已經建立好的file list中的文件或目錄,rsync會按前後順序對其中的每個名稱檢查是否
能匹配incluee/exclude規,且先匹配上的規則生效:若是能匹配上exclude規則,則該文件被跳
過,若是該文件能匹配include或不能匹配任何規則,則不挑過該文件。
rsync會按照命令行中指定的篩選規則創建一個有序的規則列表。篩選規則語法以下:
RULE [PATTERN_OR_FILENAME]
RULE,MODIFIERS [PATTERN_OR_FILENAME]
你能夠選擇使用下面所描述的長格式或短格式的RULE名稱。若是使用短格式命名的的rule,則分隔
RULE和MODIFIERS中間的","是可選的。其後的PATTERN或FILENAME必須跟在單個空格或下劃線(_)之
後。如下是規則前綴:
exclude, - 指定排除規則。
include, + 指定包含規則。
merge, . 指定一個從中讀取更多規則的merge-file。
dir-merge, : 指定一個每目錄的merge-file。
hide, H 指定傳輸過程當中須要隱藏的文件。(譯者注:exclude的本質就是hide,該類型的
規則顯然只做用於sender端,下面的"S"一樣如此)
show, S 指定不被隱藏的文件。(譯者注:include的本質就是show)
protect, P 指定保護文件不被刪除的規則。
(譯者注:--delete和--exclude同時使用時,會對被排除的文件加上保護規則。該
類型的規則顯然只做用於receiver端,下面的"R"一樣如此)
risk, R 指定不被保護的文件,即能被刪除的文件。(譯者注:"--delete-excluded"就是
將被保護的文件強制取消保護)
clear, ! 清空當前include/exclude規則列表。(不帶任何參數)
若是是從一個文件中讀取規則,將忽略空行以及使用"#"開頭的註釋行。
注意,使用了"--include"或"--exclude"選項後,將再也不解析上述所說的規則序列,只容許使用
"!"表示清空include/exclude規則。若是匹配模式不是使用"- "(減號加一個空格)或"+ "(加號加
一個空格)開頭,則規則將被認爲是在字符串的前面加了"+ "(即包含規則)或"- "(即排除規則)前
綴。實際上"--filter"選項的規則字符串中必須在字符串開頭包含短名稱或長名稱的規則。
同時須要注意的是,每一個"--filter"、"--include"以及"--exclude"選項都只表示一條規則,如
果要使用多條規則,你能夠重複使用這些選項,或者使用"--filter"選項的merge-file語法,又
或者是"--include-from"、"--exclude-from"選項。
INCLUDE/EXCLUDE PATTERN RULES
你可使用"+"、"-"等規則名稱來指定包含和排除文件的規則,以及其餘的規則。每一個include、
exclude規則都會對應一個匹配模式用於匹配將要傳輸
的文件名。匹配模式有如下幾種格式:
o 若是匹配模式以斜線(/)開頭,它表示錨定層次結構中某個特定位置的文件,不然將表示匹
配路徑名的結尾。這有點相似於正則表達式中的行首"^"。所以"/foo"匹配的是"傳輸中根
目錄"(transfer-root)下的"foo"文件,或者是merge-file目錄中的"foo"文件。對於不作
限制的"foo"匹配模式,因爲算法會從頂部開始向下逐層遞歸,因此它能匹配任意位置名爲
"foo"的文件。可是對於非錨定的"sub/foo"模式,將匹配層次結構中位於sub目錄下的foo。
對於如何指定匹配根"/"的模式見"ANCHORING INCLUDE/EXCLUDE PATTERNS"的段落說明。
o 若匹配模式以斜線(/)結尾,將只匹配目錄,而不匹配普通文件、字符連接以及設備文件。
o rsync經過檢查匹配模式中是否包含"*"、"?"以及"["符號來決定作簡單的字符串匹配仍是
通配符匹配。
o 單個"*"匹配任意路徑元素,但在遇到斜線時終止匹配。
o "**"匹配任意路徑元素,與"*"不一樣的是,它能匹配斜線。
o "?"匹配任意非斜線的單個字符。
o "["表示字符類匹配,例如"[a-z]",[[:alpha:]]。
o 在通配匹配模式中,反斜線(\)能夠對通配符號進行轉義,但若是不是對通配符號使用反斜
線,則它僅僅只是一個普通的反斜線字符。
o 若是匹配模式中包含了一個"/"(不包括以斜線結尾的狀況)或"**",則表示對包括前導目錄
的全路徑進行匹配。若是匹配模式中不包括"/"或"**",則表示只對全路徑尾部的路徑元素
進行匹配。(注意:使用了遞歸功能時,"全路徑"多是從最頂端開始向下遞歸的某中間一
段路徑)。
o 對於"dir_name/***"來講,它將匹配dir_name下的全部層次的文件。
注意,當使用"--recursive"(-r)選項(-a隱含該選項)時,每一個子路徑元素會自頂向下逐層,
被訪問所以include/exclude匹配模式會對每一個子路徑元素的全路徑名進行遞歸(例如,要包
含"/foo/bar/baz",則"/foo"和"/foo/bar"必須不能被排除)。實際上,排除匹配模式在發現
有文件要傳輸時,此文件所在目錄層次的排除遍歷會被短路。若是排除了某個父目錄,則更
深層次的include模式匹配將無效,由於rsync從排除的那個父目錄位置開始不會再向下遍歷。
這在使用尾隨"*"時尤其重要。例如,下面的例子不會正常工做:
+ /some/path/this-file-will-not-be-found
+ /file-is-included
- *
因爲父目錄"some"被規則"*"所排除,因此會失敗,rsync毫不會訪問"some"或"some/path"中的任
何文件。一種解決方式是請求包含層次結構中的全部目錄,只需使用一個規則"+ */"(需放在"- *"
規則的前面)便可,可能還須要使用"--prune-empty-dirs"選項。另外一解決方式是爲全部須要被訪
問的父目錄
增長特定包含規則。例如,下面的規則能夠正常工做:
+ /some/
+ /some/path/
+ /some/path/this-file-is-found
+ /file-also-included
- *
如下是一些exclude/include規則匹配模式:
o "- *.o"將排除全部文件名能匹配"*.o"的文件。
o "- /foo"將排除"傳輸中根目錄"(transfer-root)下名爲"foo"的文件或目錄。
o "- foo/"將排除全部名爲"foo"的目錄。
o "- /foo/*/bar"將排除"傳輸中根目錄"(transfer-root)下"foo"目錄再向下兩層的"bar"文件。
o "- /foo/**/bar"將排除transfer-root下"foo"目錄再向下遞歸任意層次後名爲"bar"的文件。
(譯者注:"**"匹配任意多個層次的目錄)
o 同時使用"+ */"、"+ *.c"和"- *",將只包含全部目錄和C源碼文件,除此以外的全部文件
和目錄都被排除。(參見選項"--prune-empty-dirs")
o 同時使用"+ foo/"、"+ foo/bar.c"和"- *"將只包含"foo"目錄和"foo/bar.c"。("foo"目錄
必須顯式包含,不然將被排除規則"- *"排除掉)
如下是"+"或"-"後可接的修飾符:
o "/"指定include/exclude規則須要與當前條目的絕對路徑進行匹配。例如,"-/ /etc/passwd"
將在任意傳輸/etc目錄中文件時刻都排除passwd文件。而對於"-/ subdir/foo"規則,當傳輸
"subdir"目錄中文件時,將老是排除"foo"文件,即便"foo"文件多是在transfer-root中的。
o "!"指定若是模式匹配失敗,則include/exclude規則生效。例如,"-! */"將排除全部非目錄
文件。(譯者注:反向匹配的意思,"- */"規則是排除全部目錄,那些非目錄文件就匹配不上,
加上"!",即"-! */",則表示匹配不上的這些非目錄文件被匹配上)
o "C"表示將全部的全局CVS排除規則插入到普通排除規則中,而再也不使用"-C"選項來插入。其後
不能再接其餘參數。
o "s"表示規則只應用於sender端。當某規則做用於sender端時,它能夠防止文件被傳輸。默認
狀況下,全部規則都會做用於兩端,除非使用了"--delete-exclude"選項,這樣規則將只做用
於sender端。請參見"hide"(H)和"show"(S)規則,這是指定sender端include/exclude規則的
另外一種方式。
o "r"表示規則只應用於receiver端。當規則做用於receiver端,它能夠防止文件被刪除。更多
信息見上面的"s"修飾符。另請參見"P"和"R"規則,它們是指定receiver端include/exclude
規則的另外一種方式。
o "p"表示此規則是易過時的,這意味着將忽略正在被刪除的目錄。例如,"-C"選項的默認規則
是以CVS風格進行排除,且"*.o"文件會被標記爲易過時,這將不會阻止在源端移除的目錄在
目標端上被刪除。
(譯者注:也就是說在源端刪除的目錄在目標端上也會被刪除。如下是原文,翻譯也許有誤)
A p indicates that a rule is perishable, meaning that it is ignored in directories
that are being deleted. For instance, the -C option’s default rules that exclude
things like "CVS" and "*.o" are marked as perishable, and will not prevent a
directory that was removed on the source from being deleted on the destination.
MERGE-FILE FILTER RULES
你能夠經過指定"."將某文件中的規則合併在規則集合中,或指定":"(dir-merge)將目錄下文件中
的規則合併在規則集合中。
有兩種合併文件的方式:單實例合併"."和每目錄合併":"。單實例合併文件僅讀取一次,其中的規
則被合併到篩選列表中替代"."所表明的規則。對於每目錄合併文件,rsync將掃描每一個目錄以遍歷
指定名稱的規則文件,併合並規則文件中的內容到當前規則列表中。每目錄合併的規則文件必須創
建在sender端,由於會掃描sender端來決定哪些文件要被傳輸。若是想讓規則文件做用於receiver
端不想被刪除的文件,則須要將規則文件傳輸到receiver端(見下面的"PER-DIRECTORY RULES AND
DELETE")。
一些示例:
merge /etc/rsync/default.rules
. /etc/rsync/default.rules
dir-merge .per-dir-filter
dir-merge,n- .non-inherited-per-dir-excludes
:n- .non-inherited-per-dir-excludes
如下是單實例合併"."和每目錄合併":"後可接的修飾符:
o "-"表示規則文件中只有exclude規則,能夠在文件中使用註釋行。
o "+"表示規則文件中只有include規則,能夠在文件中使用註釋行。
o "C"指定的是CVS分格的規則。它將會開啓"n"、"w"和"-",也容許指定規則列表清空修飾符
"!"。若不提供任何文件名,則默認爲".cvsignore"。
o "e"表示排除合併文件使其不被傳輸。
例如"dir-merge,e .rules"等價於"dir-merge .rules"+"- .rules"。
o "n"表示規則不被子目錄繼承。
o "w"表示規則是使用空白符號分隔的而不是默認的換行符。顯然,這種方式下合併文件中不
能使用註釋行。
注意:分隔規則前綴的空格是有特殊意義的,例如"- foo + bar"會被解析爲兩條規則。
o 此外,你可能還須要指定上文所述的"+"、"-"規則的修飾符,以便對這些從文件中讀取的規
則具備修飾符集(除了"!"修飾符)。例如"merge,-/ .excl"將把".excl"文件中的內容視爲絕
對路徑排除,而"dir-merge,s .filt"和":sC"都將使得全部每目錄規則僅做用於sender端。
每目錄合併規則會被全部的子目錄繼承,除非指定了"n"修飾符。每一個子目錄的規則會置放在繼承
規則的前面,使得最新的規則比繼承的規則有更高的優先級。整個dir-merge的規則集合會在指定
的merge-file中進行合併,所以可經過前面在全局規則列表中指定的規則來覆蓋dir-merge規則。
當從每目錄文件中讀取到了列表清除規則"!",將僅從當前的合併文件中清除掉繼承規則。
阻止dir-merge中的單個規則被繼承的另外一種方式是使用前導斜線(/)進行錨定。每目錄合併規則中
的錨定規則是相對於merge-file目錄的,所以"/foo"將僅匹配從dir-merge規則中找到的目錄中的
"foo"文件。
如下是一個示例,須要指定[--fileter=".file"]:
merge /home/user/.global-filter
- *.gz
dir-merge .rules
+ *.[ch]
- *.o
這將會在規則列表的頭部合併/home/user/.global-file文件中內容,還會合並全部的".rules"文
件中的規則。在目錄掃描開始以前讀取的全部規則都遵循全局錨定規則(例如,前導斜線匹配
transfer-root)。
If a per-directory merge-file is specified with a path that is a parent directory of
the first transfer directory, rsync will scan all the parent dirs from that starting
point to the transfer directory for the indicated per-directory file. For instance,
here is a common filter (see -F):
--filter=': /.rsync-filter'
That rule tells rsync to scan for the file .rsync-filter in all directories from the
root down through the parent directory of the transfer prior to the start of the normal
directory scan of the file in the directories that are sent as a part of the transfer.
(Note: for an rsync daemon, the root is always the same as the module’s "path".)
Some examples of this pre-scanning for per-directory files:
rsync -avF /src/path/ /dest/dir
rsync -av --filter=': ../../.rsync-filter' /src/path/ /dest/dir
rsync -av --filter=': .rsync-filter' /src/path/ /dest/dir
The first two commands above will look for ".rsync-filter" in "/" and "/src" before
the normal scan begins looking for the file in "/src/path" and its subdirectories.
The last command avoids the parent-dir scan and only looks for the ".rsync-filter"
files in each directory that is a part of the transfer.
If you want to include the contents of a ".cvsignore" in your patterns, you should
use the rule ":C", which creates a dir-merge of the .cvsignore file, but parsed in
a CVS-compatible manner. You can use this to affect where the --cvs-exclude (-C)
option’s inclusion of the per-directory .cvsignore file gets placed into your rules
by putting the ":C" wherever you like in your filter rules. Without this, rsync would
add the dir-merge rule for the .cvsignore file at the end of all your other rules
(giving it a lower priority than your command-line rules). For example:
cat < out.dat
then look at out.dat. If everything is working correctly then out.dat should be a
zero length file. If you are getting the above error from rsync then you will probably
find that out.dat contains some text or data. Look at the contents and try to work out
what is producing it. The most common cause is incorrectly configured shell startup
scripts (such as .cshrc or .profile) that contain output statements for non-interactive
logins.
If you are having trouble debugging filter patterns, then try specifying the -vv
option. At this level of verbosity rsync will show why each individual file is
included or excluded.
ENVIRONMENT VARIABLES
CVSIGNORE
The CVSIGNORE environment variable supplements any ignore patterns in .cvsignore
files. See the --cvs-exclude option for more details.
RSYNC_ICONV
Specify a default --iconv setting using this environment variable.
(First supported in 3.0.0.)
RSYNC_RSH
The RSYNC_RSH environment variable allows you to override the default shell
used as the transport for rsync. Command line options are permitted after
the command name, just as in the -e option.
RSYNC_PROXY
The RSYNC_PROXY environment variable allows you to redirect your rsync
client to use a web proxy when connecting to a rsync daemon. You should
set RSYNC_PROXY to a hostname:port pair.
RSYNC_PASSWORD
Setting RSYNC_PASSWORD to the required password allows you to run authenticated
rsync connections to an rsync daemon without user intervention. Note that this
does not supply a password to a remote shell transport such as ssh; to learn
how to do that, consult the remote shell’s documentation.
USER or LOGNAME
The USER or LOGNAME environment variables are used to determine the default
username sent to an rsync daemon. If neither is set, the username defaults to
"nobody".
HOME The HOME environment variable is used to find the user’s default .cvsignore
file.
FILES
/etc/rsyncd.conf or rsyncd.conf
SEE ALSO
rsyncd.conf(5)
VERSION
This man page is current for version 3.0.9 of rsync.
INTERNAL OPTIONS
The options --server and --sender are used internally by rsync, and should never
be typed by a user under normal circumstances. Some awareness of these options may
be needed in certain scenarios, such as when setting up a login that can only run
an rsync command. For instance, the support directory of the rsync distribution has
an example script named rrsync (for restricted rsync) that can be used with a
restricted ssh login.