什么是WinSCP
WinSCP 是一个 Windows 环境下使用的 SSH 的开源图形化 SFTP 客户端,同时支持SCP协议,它的主要功能是在本地与远程计算机间安全地复制文件,并且可以直接编辑文件。这个工具是我们在进行开发和运维过程中常用的工具。
声明
此文是对于WinSCP官方文档的掩码部分的翻译,如理解和翻译不到位请见谅,官方文档原文见参考。
上传下载过滤文件
通过设置文件掩码,可以上传/下载时指定目录/文件,上传/下载时过滤指定的目录。
掩码
基本语法
可以使用的匹配模式
模式 | 描述 | 示例 |
---|---|---|
* |
匹配任意数量(包括零)的任意字符 | *.doc; about*.html |
? |
恰好匹配一个任意字符 | photo????.jpg |
[abc] |
匹配集合中的一个字符 | index_[abc].html |
[a-z] |
匹配范围内的一个字符 | index_[a-z].html |
其他的字符将会被作为普通字符进行处理(除了下面描述的特殊字符)。
大小和时间约束
文件掩码可以使用如下的模式去通过时间和大小进行约束。
模式 | 描述 | 示例 |
---|---|---|
>size[KMG] |
匹配比给定大小大的文件,注意目录的大小默认是0,可以选择的单位有K,M,G | *.bin>1M |
<size[KMG] |
匹配比给定大小小的文件 | <1G |
>yyyy-mm-dd[ hh:mm[:ss]] |
匹配最后修改时间在给定日期或者时间之后的文件 |
>2012-01-01 >2012-02-29 08:47
|
>time[YDHNS][S] |
匹配最后修改时间在指定时间区间内的文件,不能用于目录。可以用的单位有Y (年),D (天),H (小时),N (分钟),S (描述)。可选的S 后缀表示将间隔前的时间舍入到间隔单位的开始,例如2DS 指的是前天的开始(午夜)。0HS 指的是当前小时的开始,关键字today ,yesterday 可以使用0DS ,1DS 一次替代 |
*.doc>1Y >2HS >yesterday
|
<yyyy-mm-dd[ hh:mm[:ss]] |
匹配最后修改时间在给定的日期或者时间之前的文件 | *.doc<2012-02-29 08:54:21 |
<time[YDHNS][S] |
匹配最后修改时间在给定的时间区间之前的文件 | <60D |
同样可以使用>=
和<=
操作符。对操作符(<>
)进行转义只需要在它之前在写一个重复一个相同的操作符即可,例如filewith<<lessthan
。
想要组合约束,只需要将一个约束添加到列外一个约束之后,并且不要任何的分割符或者使用空格。例如需要选择创建于2013年的doc文件:*.doc>=2013-01-01<=2013-12-31
。
组合约束
在大多数上下文中,可以使用分号;
或者逗号,
来组合几个掩码。例如*.jpg; *.gif
包含所有的JPG
和GIF
图片。对分割符进行转义同样只需要在其前面重复一个相同的符号即可,如filewith,,comma
。
包含和排除掩码
掩码可以通过使用|
分割来组合包含和排除掩码。例如*.jpg; *.gif | 2010*; 2011*
这个掩码包含所有的JPG
和GIF
图片,但是排除以2010和2011开头的。
包含和排除部分都可以为空,分别表明包含所有或者什么也不排除。当包含部分为空的时候,掩码以|
开头;当排除部分为空时,可以省略掉末尾的|
。排除掩码的优先级高于包含掩码,例如当文件同时匹配排除掩码和包含掩码时,那么它将会被排除。从列一方面来说,使用包含掩码有效地排除了所有不选择的文件和目录。转义同样只需要在其前面重复一个相同的符号即可,如filewith||pipe
。
目录掩码
对目录使用掩码,只需要在末尾添加反斜杠/
即可,如images/
。掩码*/
匹配所有的目录。
注意如果使用文件掩码编辑对话框的话,目录掩码的末尾会自动添加/
。让操作为非递归的话,使用掩码*/
,注意不能包含其他的掩码,如|*/
这里的|
表名它是一个排除掩码。目录掩码是递归的,例如mages/
即匹配目录/home/martin/images/
也匹配目录/home/martin/images/avatars/
。在传输和同步时,文件和目录是递归处理的,当一个目录被排除,那么这个排除目录内的文件或者子目录是不会进行文件掩码计算的,他们也和包含他的目录一样被排除。
路径掩码
当选择文件并且对于选择的目录敏感时,可以使用路径掩码。路径掩码和文件名掩码由/
进行分割,例如/home/martinp/*.txt
掩码匹配这个目录下面的所有文本文件。匹配包含子目录的所有文本的掩码,我们可以使用/home/martinp/*.txt; /home/martinp/*/*.txt
。/home/martinp*/*.txt
和/home/martinp/*/*.txt
相似,但是精确到更低。
路径掩码是完全匹配全路径的,并不是匹配相对路径,例如public_html/wiki/
并不匹配/home/martinp/public_html/wiki
目录,即使是/home/martinp/
是文件传输或者同步的根目录。部分路径掩码匹配绝对路径应当是*/public_html/wiki/
。
对于部分路径掩码使用\
和/
没有区别,这种掩码对于本地路径和远端路径都是工作的,例如*/public_html/*.bak
将会即匹配D:\Documents\public_html\
也匹配/home/martinp/public_html/
。
也可以指定全路径去匹配指定的文件或者目录,无论本地还是远端,例如想只匹配指定的.csv
目录,而不是所有的.csv
目录,可以使用/home/martinp/data/.csv/
掩码替代.csv
目录。
例外
通常掩码*.*
是一个例外,它匹配任意的文件或者目录,即使不包含任意的.
。相反*.
匹配任何不带拓展的文件或者目录。
参考
https://winscp.net/eng/docs/ui_editmask
https://winscp.net/eng/docs/file_mask