本文為命令rsync的man文檔翻譯,幾乎所有的選項都翻譯了,另外關於篩選規則部分只翻譯了一部分。由於原文很多地方都比較啰嗦,所以譯文中有些內容可能容易讓國人疑惑,所以我個人在某些地方加上了註釋。若有錯誤之處,盼請指出。 回到系列文章大綱:http://www.cnblogs.com/f-ck-ne ...
本文為命令rsync的man文檔翻譯,幾乎所有的選項都翻譯了,另外關於篩選規則部分只翻譯了一部分。由於原文很多地方都比較啰嗦,所以譯文中有些內容可能容易讓國人疑惑,所以我個人在某些地方加上了註釋。若有錯誤之處,盼請指出。
以下是rsync系列篇:
2.rsync(二):inotify+rsync詳細說明和sersync
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是一種版本控制系統,其他版本控制系統如git、svn)
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格式的。
-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
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, giv‐
ing 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. With‐
out 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 direc‐
tory 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"