Rsync

rsync 過濾器不起作用,排除所有文件

  • February 20, 2022

我正在嘗試將具有模式*/ls的文件從文件夾 /bin 同步到文件夾 test:

mkdir test
rsync -avv --exclude='*' --include=*/ls /bin/ test/
ls test

從輸出中包含過濾器無法工作:

[sender] hiding file ls because of pattern *

有誰知道怎麼了?

從左到右評估排除和包含過濾器。在您的命令行中,這意味著所有內容都被排除在外。包含過濾器沒有任何效果,因為排除模式已經匹配了所有可能的名稱。

相反,要複製ls/bin或其任何子目錄呼叫的每個文件,請使用

rsync -av -m --include='*/' --include='ls' --exclude='*' /bin/ test/

將包含模式放在首位,最後排除所有未明確包含的內容。您將需要*/與包含模式匹配,因為您可能希望進入子目錄(至少在一般情況下)。我還添加了-m,如果其中沒有文件,它會避免在目標上創建目錄。

如果您不需要遞歸併希望使用/bin/ls複製,請rsync使用

rsync -av /bin/ls test/

此處顯示的兩個命令中目標路徑名末尾的斜杠是不必要的,但如果test不是目錄,則會強制命令失敗。在某種程度上,它起到了斷言的作用。

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