我在Python中有以下命令,我编写的目的是只将.yaml
文件从source
目录(在网络上)复制到本地target
目录:< / p>
import subprocess as sp
cmd = ['rsync', '-rvt', "--include='*/*.yaml'", "--exclude='*/*'",
source , destination]
print ' '.join(cmd)
sp.call(cmd)
但是,当我运行此Python时,会复制所有文件,包括.jpg
等。
当我直接运行shell命令时:
rsync -rvt --include='*/*.yaml' --exclude='*/*' <source> <target>
...然后只按预期复制.yaml
个文件。
这里发生了什么?为什么命令在shell中的运行方式与subprocess.call
下的运行方式不同?
(这是在Ubuntu 14.04上使用Bash shell,使用Anaconda的Python 2)
答案 0 :(得分:3)
您应该删除通配符周围的单引号:
['rsync', '-rvt', "--include=*/*.yaml", "--exclude=*/*", source , destination]
这些引用由shell处理,shell不会将引号传递给rsync。