rsync 从根文件夹中排除单个文件

Raj*_*ran 4 command-line rsync

我想从一个文件夹中进行 rsync,该文件夹包含index.php(需要排除),并且许多其他目录也包含 index.php。我创建了一个排除文件并在那里添加了 index.php。但是所有的 index.php 文件都不见了。是否有任何适当的方法可以避免同步唯一的文件?

psi*_*i75 9

rsync 使用相对于根 rsync 文件夹的目录。你应该能够使用类似的东西来实现这一点

rsync -aAX ./ ../target --exclude=/index.php
Run Code Online (Sandbox Code Playgroud)

/”将表示根目录。


tho*_*ter 5

--exclude过滤器的工作原理是这样的:

  • 如果模式不以斜杠开头,则它匹配路径的末尾,树中的任何位置。

    --exclude myfile.txt匹配任何目录中调用myfile.txt任何文件。

    --exclude logs/myfile.txt比赛myfile.txt任何所谓的目录logs

  • 如果模式以斜杠开头,则它锚定到所传输文件的根目录

    要确定传输文件的根是什么,请删除路径中最后一个斜杠之后的所有内容。

    例如,在下面的 rsync 命令中,源路径是/srv/files/something,所以传输的根是/srv/files/

    rsync -a /srv/files/something host:/backup/files/
    
    Run Code Online (Sandbox Code Playgroud)

    因此,要排除源文件,/srv/files/logs/myfile.txt您将使用--exclude /logs/myfile.txt,其中排除模式开头的斜杠指的是传输的根,它植根于/srv/files/(在源上)。