rsync 过滤子路径的文件规则

rsync 过滤子路径的文件规则

我在理解子路径的 rsync 过滤规则方面遇到了很大问题。我有这个目录树:

|-- index.php
|-- other-file-php.php
|-- filesource.php
|   |-- album1
|   |   |-- firstphoto.jpg
|   |   |-- second.jpg
|   |   |-- index.php
|   |   `-- thumbs
|   |       |-- _map.txt
|   |       |-- _title_ciao.jpg.txt
|   |       |-- _120_second.jpg
|   |       |-- _dir_album1.jpg
|   |       `-- _300_second.jpg
|   |-- altre
|   |   |-- img_1172.jpg
|   |   |-- album2
|   |   |   |-- index.php
|   |   |   `-- thumbs
|   |   |       |-- _title_img_1172.jpg.txt
|   |   |       |-- _dir_album2.jpg
|   |   |       `-- _guestbook.html

我只能使用 rsync 的选项 -f -filter,因为我必须将所有规则写入一个文件中。此树中有不同类型的文件,它们可以位于树的任何级别。我想要:

  1. 对目录结构进行完整备份
  2. 备份所有类型的文件.php,,.txt.html
  3. 备份.jpg文件不要首先_
  4. .jpg以以下开头的备份文件_dir

答案1

针对你的观点:

  1. 这只是意味着您指定的所有排除规则必须是文件,而不是目录。由于 rsync 不区分类型,因此您必须小心制定规则(以及文件命名约定)。
  2. 使用:

    + **/*.php
    + **/*.txt
    + **/*.html
    
  3. 使用:

    + **/*.jpg
    - **/_*.jpg
    
  4. 我不知道你的意思。

答案2

将以下几行放入filter.txt

+ */
+ *.php
+ *.txt
+ *.html
+ **/_dir*.jpg
- **/_*.jpg
+ *.jpg
- *

rsync然后像这样运行:

rsync -a --include-from=filter.txt /path/to/source/ /path/to/dest

解释filter.txt

首先,请注意过滤规则的顺序非常重要,因为rsync要按顺序评估它们并应用第一个匹配的规则

默认情况下,rsync包括所有未明确排除的文件,因此 中的最终规则filter.txt是排除前面规则未明确包括的所有内容。第一条规则包括所有目录(如尾随的 所示/),这应该可以满足您的 #1 条件。规则 2 至 4 分别处理 php、txt 和 html 文件,而规则 5 至 7 允许所有以 开头_dir或不以 开头的jpg 文件_

(规则 5 和 6 有**前缀,以便将通配符规则锚定到文件名部分的开头在任何目录深度。如果没有**前缀,这些规则将只匹配顶级源目录。)

最后说明:如果您(由于某种原因)无法使用,那么您应该能够将过滤规则指定为命令行上的--include-from一系列选项。-f

编辑

filter.txt要在 中使用,您可以通过参数rsnapshot指定它,如下所示:rsnapshot.confinclude_file

include_file /path/to/filter.txt

编辑#2

如果您需要为每个备份使用不同的过滤器,则可以include_file对每一backup行使用不同的过滤器rsnapshot.conf,例如:

...
backup /path/to/src1/ dest1/ include_file=/path/to/src1_filter.txt
backup /path/to/src2/ dest2/ include_file=/path/to/src2_filter.txt
...

答案3

对您来说最好的方法是使用选项来制作文件:--files-from使用 find 命令,如下所示:

cd dirtobackup;find . |egrep '\.php$|\.txt$|\.html$|^[^_].*\.jpg$|^_dir.*\.jpg$' >/tmp/files_tobackup
rsync --files-from=/tmp/files_tobackup dirtubackup dst

相关内容