我在理解子路径的 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
Run Code Online (Sandbox Code Playgroud)
我只能使用 rsync 的 -f -filter 选项,因为我必须将所有规则写入一个文件。在这棵树中,有不同类型的文件可以位于树的任何级别。我想要:
.php, .txt,.html.jpg文件_.jpg以开头的备份文件_dir将以下行放入filter.txt:
+ */
+ *.php
+ *.txt
+ *.html
+ **/_dir*.jpg
- **/_*.jpg
+ *.jpg
- *
Run Code Online (Sandbox Code Playgroud)
然后rsync像这样运行:
rsync -a --include-from=filter.txt /path/to/source/ /path/to/dest
Run Code Online (Sandbox Code Playgroud)
的解释filter.txt:
首先,请注意过滤规则的排序非常重要,因为rsync按顺序评估它们并应用匹配的第一个规则。
默认情况下,rsync包括所有未明确排除的文件,因此最终规则filter.txt是排除前面规则未明确包括的所有内容。第一条规则包括所有目录(如尾随 所示/),它应该处理您的 #1 条件。规则 2 到 4 分别处理 php、txt 和 html 文件,而规则 5 到 7 允许所有_dir以_.
(规则 5 和 6 具有**前缀,以便将通配符规则锚定到任何目录深度的文件名部分的开头。如果没有**前缀,这些规则将仅在顶级源目录中匹配。)
最后说明:如果您无法(由于某种原因)使用--include-from,那么您应该能够-f在命令行上将过滤规则指定为一系列选项。
编辑
要使用filter.txtin rsnapshot,您可以rsnapshot.conf通过include_file参数指定 in ,如下所示:
include_file /path/to/filter.txt
Run Code Online (Sandbox Code Playgroud)
编辑#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
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4245 次 |
| 最近记录: |