Go执行shell命令之copy命令
当我以为我不会遇到坑的时候,坑就在那里,不偏不移,刚好让我踩过去。之前写了关于如何调用系统命令的小结,这里果然不负我望,当场让我晓得了,总结不够到位,有瑕疵。
项目有用到cp
的操作,大概就是把某目录下的所有文件复制到上级目录中,也就是cp -rf ./test/* ../
。
首先看代码。
1 | cpCmd := exec.Command("cp", "-rf", "./test/*", "../") |
代码看起来是没有问题的,但是运行起来,却是会报出错误。
1 | cp: cannot stat ‘./test/*’: No such file or directory |
这是为何呢,若是直接在shell中运行该命令,是没有问题的,为什么在程序中运行就会出现问题呢?
用力Google了一下,查到cp: cannot stat ‘/some/path/*’: No such file or directory。
大概的意思是,该*
会被处理成字符串,而不是特殊意义上的通配符,所以,也就会被认定为一个文件或者文件夹,所以,它就报错了,大概就是这么个情况。
至于程序中如何解决这种情况呢?准确的来讲,我其实是没有找到解决方式的,也就只是换了种替代方式(一个一个文件/文件夹移动)。
这里,还发现另一个问题,若调用命令如:
1 | cpCmd := exec.Command("sh", "-c","cp", "-rf", "./test/*", "../") |
则程序将报出:
1 | cp: missing file operand |
同样的,很遗憾,我未能找到具体发生这个现象的原因,算起来,这算是比较坑爹的问题吧,因为是面对项目,只能说碰到了优先以解决为主,当时间不允许的情况下,赶紧避开。
这里记录一下,我再找找出现问题的原因。
这里放一个小的复制封装:https://github.com/juju/utils/blob/master/fs/copy.go
本文标题:Go执行shell命令之copy命令
文章作者:小师
发布时间:2019-03-22
最后更新:2022-05-04
原始链接:chunlife.top/2019/03/22/Go执行shell命令之copy/
版权声明:本站所有文章均采用知识共享署名4.0国际许可协议进行许可