阅读过滤规则手册页,看着这里后:Using Rsync filter to include/exclude filesRsync的过滤器在Python循环
我不明白,为什么下面的代码无法正常工作。
import subprocess, os
from ftplib import FTP
ftp_site = 'ftp.ncbi.nlm.nih.gov'
ftp = FTP(ftp_site)
ftp.login()
ftp.cwd('genomes/genbank/bacteria')
dirs = ftp.nlst()
for organism in dirs:
latest = os.path.join(organism, "latest_assembly_versions")
for path in ftp.nlst(latest):
accession = path.split("/")[-1]
fasta = accession+"_genomic.fna.gz"
subprocess.call(['rsync',
'--recursive',
'--copy-links',
#'--dry-run',
'-vv',
'-f=+ '+accession+'/*',
'-f=+ '+fasta,
'-f=- *',
'ftp.ncbi.nlm.nih.gov::genomes/genbank/bacteria/'+latest,
'--log-file=scratch/test_dir/log.txt',
'scratch/' + organism])
我也试过'--exclude=*[^'+fasta+']'
尽量排除不中latest/*
匹配fasta
代替-f=- *
对于每个目录path
文件,我想这完全匹配fasta
文件。目录latest/path
中始终只有一个文件fasta
。
编辑:我与的rsync版本3.1.0测试这一点,并已经看到了不兼容问题与早期版本。
这里是工作的代码,你应该能够将其粘贴到Python解释器得到的结果中的链接“试运行”,这将不会下载任何东西到你的机器:http://pastebin.com/0reVKMCg它ftp.ncbi.nlm.nih.gov::genomes/genbank/bacteria/'+latest
下得到的一切,这不是我想要的。如果我运行该脚本与'-f=- *'
取消注释,它没有得到任何东西,这似乎违背这里Using Rsync filter to include/exclude files
你确定你可以通过FTP使用'rsync'吗?:http://serverfault.com/questions/24622/how-to-use-rsync-over -ftp –
是的,我确定。我有一个类似的脚本工作得很漂亮,直到我意识到我得到的一些文件(根据我的过滤器)是我不想要的文件。 – truthling
嗯,你可以发布工作片段,以便我们可以得到一个示例输出,然后进一步阐明你想要过滤的内容? –