閱讀過濾規則手冊頁,看着這裏後: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
嗯,你可以發佈工作片段,以便我們可以得到一個示例輸出,然後進一步闡明你想要過濾的內容? –