ansible playbook无法识别'*';正则表达式 -名称:将附带的媒体文件复制到symlink shell:'/bin/cp-Rf/opt/omnius/ose/media.bak/*/var/opt/ose_media/'

ansible playbook无法识别'*';正则表达式 -名称:将附带的媒体文件复制到symlink shell:'/bin/cp-Rf/opt/omnius/ose/media.bak/*/var/opt/ose_media/',ansible,cp,Ansible,Cp,以下任务失败,出现以下错误 fatal: [nl3832yr]: FAILED! => {"changed": true, "cmd": ["/bin/cp", "-Rf", "/opt/omnius/ose/media.bak/*", "/var/opt/ose_media/"], "delta": "0:00:00.004059"

以下任务失败,出现以下错误

fatal: [nl3832yr]: FAILED! => {"changed": true, "cmd": ["/bin/cp", "-Rf", "/opt/omnius/ose/media.bak/*", "/var/opt/ose_media/"], "delta": "0:00:00.004059", "end": "2021-04-15 17:13:31.123072", "msg": "non-zero return code", "rc": 1, "start": "2021-04-15 17:13:31.119013", "stderr": "/bin/cp: cannot stat ‘/opt/omnius/ose/media.bak/*’: No such file or directory", "stderr_lines": ["/bin/cp: cannot stat ‘/opt/omnius/ose/media.bak/*’: No such file or directory"], "stdout": "", "stdout_lines": []}

似乎ansible无法识别
*

这与ansible没有任何直接关系,因为ansible将像在shell中一样执行该行。因此,您使用的shell无法解析
*
。 您可以使用以下方法更改此设置:

-名称:将附带的媒体文件复制到symlink
shell:'/bin/cp-Rf/opt/omnius/ose/media.bak/*/var/opt/ose_media/'
可执行文件:/bin/bash
但是您实际上应该将参数与
remote\u src
参数一起使用,如下所示:

-名称:将附带的媒体文件复制到symlink
副本:
src:/opt/omnius/ose/media.bak/
目的地:/var/opt/ose\u介质/
遥控器:是的

使用ansible模块总是比使用
shell
模块更好。

从技术上讲,您使用的是shell glob,而不是常规的expression。此glob不会给出用作regexp的预期结果,因为
/*
将匹配“零个或多个正斜杠”,并且您需要
/.
(“正斜杠和零个或多个字符)它是一个远程复制目录,所以复制模块无法工作是的,它可以,你需要使用
remote\u src
选项,正如我在回答中所写的,你可以在示例中看到它我只需要媒体的内容。bak文件夹不是整个模具本身
/
src
末尾的
//code>正好解决了这个问题…Thnx