最近更新时间:2024-12-13 17:33:22
用户可以使用--include
或--exclude
参数,根据每个Key的名称过滤筛选文件。过滤规则支持两种模式:默认模式和正则模式,本文将详细介绍两种模式的生效规则。
1. 该文档只针对Util V2.7.0及以上版本生效。
2. --include
和--exclude
可以出现多次,多个规则的顺序不会影响匹配结果。
3. 为避免特殊字符的影响,建议将过滤规则使用双引号""
包含。
*
:匹配所有字符。例如:"*.txt"
表示匹配所有TXT格式的文件。
?
:匹配单个字符。例如:"file?.txt"
表示匹配file+任意一个字符的txt文件,如:file2.txt
。
[sequence]:匹配sequence的任意字符,例如:"abc[1-5].jpg"
表示匹配文件名为abc1.jpg~abc5.jpg的文件。
[!sequence]:匹配不在sequence的任意字符,例如:"abc[!1-5].jpg"
表示匹配文件名不为abc1.jpg~abc5.jpg的文件。
正则模式遵循正则表达式规范。
若exclude存在,且只要有一个exclude匹配成功,文件被排除。
若exclude不存在,或所有exclude匹配失败,则由include决定匹配结果。
若include存在,且只要有一个include匹配成功,文件被选中。若所有include匹配失败,文件被排除。
若exclude和include都不存在,表示不过滤,文件被选中。
示例:
case1: 无 include,无 exclude,文件被选中
case2: 有 include 且匹配,无 exclude,文件被选中
case3: 有 include 且不匹配,无 exclude,文件被排除
case4: 无 include,有 exclude 且匹配,文件被排除
case5: 无 include,有 exclude 且不匹配,文件被选中
case6: 有 include 且匹配,有 exclude 且匹配,文件被排除
case7: 有 include 且匹配,有 exclude 且不匹配,文件被选中
case8: 有 include 且不匹配,有 exclude 且匹配,文件被排除
case9: 有 include 且不匹配,有 exclude 且不匹配,文件被排除
以下过滤规则均采用默认匹配模式,若采用正则匹配模式(--enable-regex),规则需符合正则表达式规范。
例如指定生效的文件夹中包含名为file5.txt
的文件,如下所示为基于该场景下匹配不同的规则生效结果示例。
规则一:--exclude "*test*"
该规则的含义:排除所有文件名包含test的文件
先匹配--exclude规则,当规则匹配到--exclude "*test*"
时,因为file5.txt不包含test,所以未被排除,则匹配的最终结果为file5.txt符合条件。
规则二:--exclude "*file*"
该规则的含义:排除所有文件名包含file的文件
先匹配--exclude规则,当规则匹配到--exclude "*file*"
时,因为file5.txt包含file,所以被排除,则匹配的最终结果为file5.txt不符合条件。
规则三:--include "*test*"
该规则的含义:选中所有文件名包含test的文件
先匹配--exclude规则,发现无--exclude规则,再匹配--include规则,当规则匹配到--include "*test*"
时,因为file5.txt不包含test,所以未被选中,则匹配的最终结果为file5.txt不符合条件。
规则四:--include "*file*"
该规则的含义:选中所有文件名包含file的文件
先匹配--exclude规则,发现无--exclude规则,再匹配--include规则,当规则匹配到--include "*file*"
时,因为file5.txt包含file,所以被选中,则匹配的最终结果为file5.txt符合条件。
规则一:--include "*.txt" --exclude "*test*"
该规则的含义:排除所有文件名包含test的文件后,选中文件结尾是.txt的文件
先匹配--exclude规则,当规则匹配到--exclude "*test*"
时,因为file5.txt不包含test,所以未被排除;再匹配--include规则,当规则匹配到--include "*.txt"
时,因为file5.txt包含.txt,所以被选中,则匹配的最终结果为file5.txt符合条件。
规则二:--include "*.txt" --exclude "*file*"
该规则的含义:排除所有文件名包含file的文件后,选中文件结尾是.txt的文件
先匹配--exclude规则,当规则匹配到--exclude "*file*"
时,因为file5.txt包含file,所以被排除,则匹配的最终结果为file5.txt不符合条件。
规则三:--include "*.txt" --exclude "*test*" --include "*abc*" --exclude "*.png"
该规则的含义:排除所有文件名包含test或后缀是.png的文件后,选中文件结尾是.txt或包含abc的文件
先匹配--exclude规则,当规则匹配到--exclude "*test*"
时,因为file5.txt不包含test,所以未被排除,当规则匹配到--exclude "*.png"
时,因为file5.txt不包含.png,所以未被排除;再匹配--include规则,当规则匹配到--include "*.txt"
时,因为file5.txt包含.txt,所以被选中,则匹配的最终结果为file5.txt符合条件。
规则四:--include "*.txt" --exclude "*file*" --include "*abc*" --exclude "*.png"
该规则的含义:排除所有文件名包含file或后缀是.png的文件后,选中文件结尾是.txt或包含abc的文件
先匹配--exclude规则,当规则匹配到--exclude "*file*"
时,因为file5.txt包含file,所以被排除,则匹配的最终结果为file5.txt不符合条件。
默认情况下,KS3Util的过滤规则匹配的是文件名,填写--path-matching
选项后,KS3Util的过滤规则匹配的是文件路径。
在使用路径匹配时,推荐使用正则模式(--enable-regex)。
上传时,如有本地文件的绝对路径为:/root/files/upload/abc.txt
规则一:--include ".*\.txt" --enable-regex
该规则的含义:选中文件名结尾是.txt的文件
因为abc.txt包含.txt,所以被选中,则匹配的最终结果为abc.txt符合条件。
规则二:--include ".*upload.*" --enable-regex
该规则的含义:选中文件名包含upload的文件
因为abc.txt不包含upload,所以未被选中,则匹配的最终结果为abc.txt不符合条件。
下载时,如有KS3中文件的Key为:files/download/abc.txt
规则一:--include ".*\.txt" --enable-regex
该规则的含义:选中文件名结尾是.txt的文件
因为abc.txt包含.txt,所以被选中,则匹配的最终结果为abc.txt符合条件。
规则二:--include ".*download.*" --enable-regex
该规则的含义:选中文件名包含download的文件
因为abc.txt不包含download,所以未被选中,则匹配的最终结果为abc.txt不符合条件。
上传时,如有本地文件的绝对路径为:/root/files/upload/abc.txt
规则一:--include ".*\.txt" --path-matching --enable-regex
该规则的含义:选中文件路径结尾是.txt的文件
因为/root/files/upload/abc.txt包含.txt,所以被选中,则匹配的最终结果为abc.txt符合条件。
规则二:--include ".*upload.*" --path-matching --enable-regex
该规则的含义:选中文件路径包含upload的文件
因为/root/files/upload/abc.txt包含upload,所以被选中,则匹配的最终结果为abc.txt符合条件。
下载时,如有KS3中文件的Key为:files/download/abc.txt
规则一:--include ".*\.txt" --path-matching --enable-regex
该规则的含义:选中文件路径结尾是.txt的文件
因为files/download/abc.txt包含.txt,所以被选中,则匹配的最终结果为abc.txt符合条件。
规则二:--include ".*download.*" --path-matching --enable-regex
该规则的含义:选中文件路径包含download的文件
因为files/download/abc.txt包含download,所以被选中,则匹配的最终结果为abc.txt符合条件。
纯净模式