rsync - 如何排除一个 .htaccess 但不是全部

rsync - 如何排除一个 .htaccess 但不是全部

我有一个rsync命令用于将文件从开发复制到生产。我不想复制 HTML 目录根目录中的 .htaccess 文件,但我想复制其子目录中的几个 .htaccess 文件。

我使用的参数--exclude .htaccess是阻止复制所有文件。我包括的其他参数是-a --recursive --times --perms。是否可以通过配置rsync来执行此操作?

编辑: 这是我的完整命令:

rsync -a --recursive --times --perms \
    --exclude prop_images --exclude tracking --exclude vtours \
    --exclude .htaccess --exclude .htaccess_backup --exclude "*~" \ 
    /home/user/dev_html/* /home/user/public_html/

答案1

当您指定时--exclude .htaccess,您将排除任何以 结尾的路径.htaccess

要仅排除传输源根目录中的 .htaccess,您需要--exclude /.htaccess

从 rsync 手册页中,可以找到一些进一步的详细信息和其他阅读材料的参考:

  • 如果模式以 / 开头,则它将锚定到文件层次结构中的特定位置,否则它将与路径名的末尾匹配。这类似于正则表达式中的前导 ^。因此,“/foo”将匹配位于“传输根目录”(对于全局规则)或合并文件目录(对于每个目录规则)中的名为“foo”的文件。不合格的“foo”将匹配树中任何位置名为“foo”的任何文件或目录,因为算法是从上到下递归应用的;它的行为就像每个路径组件都轮流成为文件名的末尾一样。即使未锚定的“sub/foo”也会在层次结构中的任何位置匹配,只要在名为“sub”的目录中找到“foo”。有关如何指定在传输根目录匹配的模式的完整讨论,请参阅锚定包含/排除模式部分。

答案2

尝试这个选项:

--exclude 'some/parts/of/path/.htaccess'

也可以使用 Glob:

--exclude 'some/*/of/*/.htaccess'

相关内容