Rsync包含/排除不在python子进程中工作

时间:2016-10-01 00:37:06

标签: python python-3.x rsync

我使用rsync将文件从家用计算机移动到服务器。这是我用来传输和更新仅包含grep + glob的文件的目录的命令。我从下面显示的目录结构中的toplevel/目录执行此命令。

 rsync -r --progress --include='**201609*/***' --exclude='*' -avzh files/ user@server.edu:/user/files

这里是我家文件上工作目录的文件结构:

 - toplevel
      - items
      - files
        - 20160315
        - 20160910
          - dir1
            - really_cool_file1
        - 20160911
          - dir2

这很好用,user@server.edu:/user/files上的文件结构与家用电脑上的文件结构相同。

我编写了一个python脚本来执行此操作但它不起作用。它也会在files/20160315上转移,这不是我想要的。

 #!/usr/bin/env python3
 import os
 from subprocess import run

 os.chdir("toplevel")

 command_run = ["rsync", "-r",
           "--progress",
           "--include='**201609*/***'",
           "--exclude='*'",
           "-avzh",
           "files/", "user@server.edu:/user/files"]

 run(command_run, shell=False, check=True)

这里发生了什么?当command_run是一个字符串时,我遇到了同样的问题,我将subprocess.run()传递给了shell=True

1 个答案:

答案 0 :(得分:1)

在传递给被调用进程之前,shell会删除其中一些引号。如果使用默认的shell=False调用程序,则需要自己执行此操作。这个小脚本会告诉你你的参数需要什么样的

test.py

#!/usr/bin/env python3
import sys
print(sys.argv)

然后使用命令行运行

~/tmp $ ./test.py -r --progress --include='**201609*/***' --exclude='*' -avzh files/ user@server.edu:/user/files
['./test.py', '-r', '--progress', '--include=**201609*/***', '--exclude=*', '-avzh', 'files/', 'user@server.edu:/user/files']
~/tmp $