我有一个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'