Rsync include/exclude 在 python 子进程中不起作用
Rsync include/exclude don't work in python subprocess
我使用 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
是一个字符串时,我遇到了同样的问题,我用 shell=True
.
将它传递给了 subprocess.run()
其中一些引号在传递给被调用进程之前被 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 $
我使用 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
是一个字符串时,我遇到了同样的问题,我用 shell=True
.
subprocess.run()
其中一些引号在传递给被调用进程之前被 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 $