什么是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