使用通配符

为文件传输指定源文件名和源文件路径时,可以使用通配符。 这使您能够同时选择多个文件。

分布式平台

您可以在分布式平台上使用以下通配符:
?
使用问号 (?) 正好表示一个字符。 匹配的文件名中需要存在指定的所有其他字符。

例如,ab?d.jpg 与文件 abcd.jpgabed.jpgabfd.jpg 相匹配。

*
使用星号字符 (*) 表示零个或零个以上字符。

例如,*.txt 与文件 abc.txtx.txt 相匹配。

模式 *txt 与文件 abc.txtx.txtnewtxt 相匹配,因为句点 (.) 在文件名中是必需字符。

必须将星号字符 (*) 用双引号引起来。 如果不这样做,命令 shell 将解释该字符,可能会导致命令失败。

UNIX 和 Linux®上,使用星号字符 (*) 将不包含伪隐藏文件,例如 .bashrc

如果操作系统对于文件和路径名 (例如 Windows) 不区分大小写,那么模式匹配不区分大小写。 只可以使用通配符指定文件名:不能在目录名中使用通配符。

协议网桥代理

如果要使用协议网桥代理传输来自 FTP、FTPS 或 SFTP 文件服务器的文件,那么通配符匹配是区分大小写的,这与实际运行文件服务器的平台无关。

Connect:Direct 网桥

当传输源是从 Connect:Direct 节点请求文件的 Connect:Direct® 网桥代理时,不支持通配符。

IBM i

可以在 IBM® i 平台上使用以下通配符:
?
使用问号 (?) 正好表示一个字符。 匹配的文件名中需要存在指定的所有其他字符。

例如,ab?d.jpg 与文件 abcd.jpgabed.jpgabfd.jpg 相匹配。

*
使用星号字符 (*) 表示零个或零个以上字符。

例如,*.txt 与文件 abc.txtx.txt 相匹配。

模式 *txt 与文件 abc.txtx.txtnewtxt 相匹配,因为句点 (.) 在模式中是必需字符。

有关将通配符用于保存文件传输的其他注意事项,请参阅 传输驻留在 IBM i 系统上的 QSYS.LIB 文件系统中的保存文件

z/OS

对于 z/OS® 系统, IBM MQ Managed File Transfer 的通配符规则通常遵循标准 ISPF 通配符约定。 连续数据集和分区数据集的特定规则如下:

顺序数据集

引用连续数据集时,可以按如下所述使用包含星号 (*) 和百分号 (%) 的数据集名称限定符:
*
使用单个星号 (*) 表示至少一个限定符。 限定符中的单个星号表示零个或零个以上字符。
**
使用双星号 (**) 表示零个或零个以上限定符。 不能在限定符中使用双星号。
%
使用单个百分号 (%) 表示一个字母数字或本地语言字符。
%%
使用一到八个百分号表示零个或零个以上字符。

分区数据库

引用分区数据集时,只能为成员名指定通配符。 可以按如下所述使用包含星号 (*)、下划线 (_) 和问号 (?) 的数据集名称限定符:
*
使用星号 (*) 字符表示零个或零个以上字符。
_
使用下划线 (_) 字符仅表示一个字符。
?
使用问号 (?) 字符正好表示一个字符。 问号是下划线字符的备用选择,作为 ISPF 约定的附加项提供。

目录

缺省情况下,如果使用与子目录匹配的通配符模式创建文件传输,那么不会传输子目录。 您可以在 fteCreateTransfer 命令上指定 -r 参数,以包含与通配符模式匹配的子目录。 传输子目录时,将传输子目录的全部内容和结构:包括其所有文件、子目录和隐藏文件。

例如,如果具有名为 abc 的目录,那么指定源文件路径 /opt/abc/opt/abc/* 之间的行为存在差异。 在 /opt/abc 的情况下,由于传输目录,因此将在目标路径创建名为 abc 的目录,并将传输所有文件内容。 在 /opt/abc/* 的情况下,会将 abc 的内容传输到目标路径。

隐藏文件

通配符与隐藏文件不匹配,但在 UNIX 类型的平台上,通配符模式以点字符 (.) 开头时除外。 例如: /opt/.* 传输 opt 目录中的所有隐藏文件。

在 Windows 上,如果要传输隐藏文件,请准确指定文件名或传输包含隐藏文件的目录。

符号链接

符号链接是一种包含指向另一个文件或目录的指针的文件类型,在 Windows 上称为快捷方式。 您可以使用通配符来匹配符号链接文件。 但是,从符号链接形式的源创建目标文件时,目标文件将成为硬链接(即常规文件)。 无法将符号链接成功地传输到目录,因为这可能会创建递归路径。

传输文件名中具有通配符的文件

文件名自身包含通配符时,可以传输文件。 如果准确指定文件名,那么只会传输该文件,而不会传输与通配符匹配的文件集。

例如,如果具有名为 /opt/abc*.txt 的文件并为 /opt/abc*.txt 创建文件传输,那么只会传输文件 /opt/abc*.txt。 但如果为 /opt/ab*.txt 创建文件传输,那么将传输所有与模式 /opt/ab*.txt 匹配的文件,包括文件 /opt/abc*.txt

传输包含通配符的目录路径

用双引号 (" ") 或单引号 (' ') 引起任何包含通配符的目录路径,以避免 shell 扩展。 当操作系统在将通配符传递到 IBM MQ Managed File Transfer 命令之前扩展通配符时,会发生 shell 扩展,这可能会导致意外行为。
例如,如果在 UNIX 上运行带有 -gt 参数的以下 fteCreateTransfer 命令,其中 ${...} 是来自资源监视器的变量替换:
fteCreateTransfer -p QM_VENUS -sa AGT.QM_JUPITER -sm QM_JUPITER -da AGT.QM_NEPTUNE -dm QM_NEPTUNE -r -sd delete
-t binary -de overwrite -jn MONTASK -gt /home/fteadmin/bin/TransferTask.xml -df "${FilePath}" "${FilePath}"
shell 解析 ${FilePath},并且不会将其传递至命令。 变通方法为使用双引号将 ${FilePath} 括起来,即 ${FilePath}

即使通配符匹配零个文件,也将传输报告为成功

如果尝试传输不存在的文件,那么 IBM MQ Managed File Transfer 会将此尝试视为失败的传输。 如果显式指定文件名 (例如, /a/missing/filename.txt) ,并且 MQMFT 找不到该文件,那么会在日志中报告以下错误消息:

BFGIO0001E: File "/a/missing/filename.txt" does not exist
作为这个过程的一部分,源代理(可能找不到该文件)通知目标代理已取消此文件传输(因为源代理无法找到要读取的源文件)。 如果您计划在传输后触发一个出口,那么目标代理会为该文件名触发包含 CANCEL_FILE 的 FileExitResultCode 的 DestinationTransferEndExit。
但是,如果尝试传输通配符 (例如, /a/missing/*.txt) ,并且源代理找不到任何与该通配符匹配的文件,那么 MQMFT 会将此报告为成功传输。 这是因为从技术上而言,源代理被要求传输 0 个文件。 会在日志中报告以下错误消息:

The transfer request has successfully completed, although no files were transferred. 
在该示例中,由于传输中未涉及目标代理,因此未调用其出口。