rsync:當使用–files-from=FILE 時,為什麼–archive 不暗示–recursive?
使用
-r
or--recursive
導致rsync
遞歸到目錄中。-a
或--archive
等於-rlptgoD
,所以-a
暗示-r
。如果我有目錄
source/
並且dest/
我執行:rsync source dest
然後
rsync
跳過source/
並且不複製任何內容。如果我執行:rsync -a source dest
然後
-a
暗示-r
並將其所有內容rsync
複製source/
到dest/
.但是,如果我有一個
list.txt
包含該行的文件source
,並且我的目錄的完整路徑source/
是/home/user/source/
,我執行:rsync -a --files-from=list.txt /home/user/ dest
然後
rsync
只複製source/
到dest/
但不複製其內容。如果我在沒有-a
選項的情況下執行命令,也會發生同樣的情況。但是,如果我使用以下命令執行相同的命令
-r
:rsync -r --files-from=list.txt /home/user/ dest
然後將其所有內容
rsync
複製source/
到dest/
.我的問題是:
- 為什麼不
-a
暗示-r
何時--files-from=FILE
使用該選項?這是預期的行為嗎?- 鑑於該命令
rsync source dest
跳過source/
並不複製任何內容,因為source/
它是一個目錄並且既不使用-a
也不-r
使用,為什麼該命令rsync --files-from=list.txt /home/user/ dest
仍然複製source/
到dest/
?- 使用該選項時,隱含的其他選項是否
-a
仍然有效--files-from=FILE
?是-r
唯一被遺漏的選項嗎?**編輯:**看起來我應該
man
更徹底地閱讀該頁面。在--files-from=FILE
選項的描述下,它說:–archive (-a) 選項的行為並不意味著 –recursive (-r),因此如果需要,請明確指定它。
(回答我的第一個問題。)
–dirs (-d) 選項是隱含的,它將創建在目標列表中指定的目錄,而不是嘈雜地跳過它們(如果要關閉它,請使用 –no-dirs 或 –no-d )。
(回答我的第二個問題。)
-a
,--archive
這相當於
-rlptgoD
. 這是表示您想要遞歸併想要保留幾乎所有內容的一種快速方式(這是-H
一個明顯的遺漏)。 上述等價的唯一例外是 when--files-from
被指定,在這種情況下-r
並不暗示。當您使用
--files-from
時,遞歸被禁用(這是唯一遺漏的選項)。假設使用者確切地知道要傳輸哪些特定文件,並且他們已在使用的文件列表中指定了這些文件--files-from
。如果在文件列表中指定了目錄,則將同步其所有權、時間戳等,但不會同步其內容。
您可以
-r
顯式添加標誌:rsync -av --files-from=file.list -r src/ dst/
這將產生您正在尋找的效果。