Command-Line

rsync:當使用–files-from=FILE 時,為什麼–archive 不暗示–recursive?

  • October 12, 2017

使用-ror--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/

這將產生您正在尋找的效果。

引用自:https://unix.stackexchange.com/questions/397637