August 28, 2010 - Tagged as: python, tr.

Nautilus scriptleri işimi acayip kolaylaştırıyor, yazımı da çok kolay, bir gün içerisinde bir şeyi birden fazla kez yapıyorsam, o işlemi nautilus scripti aracılığıyla yapmaya çalışıyorum artık. Python ile tabii ki..
Bu seferki seçtiğiniz dosyaları(veya klasörleri)(birden fazla seçebilirsiniz), FTP sunucunuzda belirttiğiniz klasöre gönderiyor. Harici bir kütüphane kullanmadım, FTP işlemleri için ftplib kullandım. ftplib neredeyse bir kütüphane değil istemci, çok basit birkaç komutla her işinizi halledebilirsiniz.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import ftplib, os, sys
try:
import pynotify
except ImportError:
uyar = False
else:
uyar = True
sayac = 0
# Debug icin, silinebilir
# sys.stderr = open('/home/osa1/Desktop/stderr.txt', 'w')
# sys.stdout = open('/home/osa1/Desktop/stdout.txt', 'w')
ftp = ftplib.FTP('ftp sunucunuz')
ftp.login(user='kullanici adiniz', passwd='sifreniz')
yerler = [f.strip() for f in os.environ['NAUTILUS_SCRIPT_SELECTED_URIS'].split('file://') if len(f) > 0]
def gonder(local, baslangic='/media'): # upload edilecek klasor
global sayac
if os.path.isdir(local):
basename = os.path.basename(local)
sunucuKlasor = '%s/%s' % (baslangic, basename)
try:
ftp.mkd(sunucuKlasor)
except ftplib.error_perm:
pass
for dosya in os.listdir(local):
localYeni = '%s/%s' % (local, dosya)
gonder(localYeni, baslangic=sunucuKlasor)
else:
dosyalar = ftp.nlst(baslangic)
if os.path.basename(local) in baslangic:
ftp.delete(os.path.basename(local))
ftp.storbinary('STOR %s/%s' % (baslangic, os.path.basename(local)),
open(local, 'rb'))
sayac += 1
if uyar:
n = pynotify.Notification("Upload basladi",
"%s dosya ve/veya klasor" % len(yerler))
n.show()
for yer in yerler:
gonder(yer)
if uyar:
n = pynotify.Notification("Upload bitti",
"%s dosya upload edildi" % sayac,
"gnome-netstatus-txrx")
n.show()
ftp.close()