【发布时间】:2016-06-22 00:01:34
【问题描述】:
阅读有关过滤规则的手册页并查看此处:Using Rsync filter to include/exclude files
我不明白为什么下面的代码不起作用。
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+']' 尝试排除与fasta 而不是-f=- * 不匹配的文件
对于latest/* 中的每个目录path,我想要与fasta 完全匹配的文件。目录latest/path 中始终只有一个文件fasta。
编辑:我正在使用 rsync 版本 3.1.0 进行测试,发现与早期版本不兼容。
这是一个工作代码的链接,您应该可以将其粘贴到 Python 解释器中以获得“试运行”的结果,它不会将任何内容下载到您的计算机上:http://pastebin.com/0reVKMCg 它在 @ 下得到了一切987654336@,这不是我想要的。如果我在 '-f=- *' 未注释的情况下运行该脚本,它什么也得不到,这似乎与这里的答案相矛盾 Using Rsync filter to include/exclude files
【问题讨论】:
-
您确定可以通过 FTP 使用
rsync吗?:serverfault.com/questions/24622/how-to-use-rsync-over-ftp -
是的,我确定。我有一个类似的脚本运行良好,直到我意识到我得到的一些文件(根据我的过滤器)是我不想要的文件。
-
hmm,您能否发布有效的 sn-p 以便我们获得示例输出,然后进一步阐明您要过滤的内容?
-
当然 - 感谢您的提问!这个pastebin.com/0reVKMCg 有效,但看起来它在
ftp.ncbi.nlm.nih.gov::genomes/genbank/bacteria/'+latest下得到了一切。如果我在'-f=- *'未注释的情况下运行该脚本,它什么也得不到,这似乎与stackoverflow.com/questions/35364075/… 的答案相矛盾 -
运行 pastebin 并没有为我生成任何东西...
标签: python ftp subprocess rsync