25 Mayıs 2008Python OS modülü ile dizin içindeki dosyaları silme
Dün bir müşterim aradı ve çok uzunca süre kontrol etmediği bir emailinde yirmi bin adet mail olduğunu ve bunların tek tek silemeyeceğini belirterek benden destek almak istedi.
Müşterimin bu isteğini yerine getirmek için hemen ilgili sunucuma ssh ile bağlandım. Aşağıdaki komutu vererek işlem yapmak istediğim dizine geçiş yaptım.
cd /var/qmail/mailnames/site.com/mail_adi/Maildir
bu komut ile müşterimin mail dizinine geçiş yaptım. Ardından yirmi bin adet maili silmek için aşağıdaki komutu verdim.
rm -rf cur/*
Bu komut normal de cur dizini altındaki bütün alt dizin ve dosyaları silmesi gerekir. Fakat dosya çokluğundan olsa gerek too long hatası ile karşılaştım.
Ben de araştırmaya vaktim olmadığı için oturup bir python betiği yazdım. Yazdığım bu betik belirtilen dizin içindeki tüm alt dizin ve dosyaları siliyor.
dosyamız: sil.py
#!/usr/bin/python # -*- coding: utf-8 -*- # Bu betik *nix türevi işletim sistemlerinde belirtilen dizindeki # tüm alt dizin ve dosyaları siler. Betikden doğacak herhangi bir problemden # betik yazarı sorumlu tutulamaz. # # Yazar: Yusuf KOÇ ( Raiden ) < yusufkoc at ayva dot net > # www.ysfkc.com # Silme işlemini yapacak olan fonksiyonumuzu tanımlıyoruz. def sil(): # OS modülümüzü import ediyoruz. import os # Dizin ayracımızı (seperator) belirtiyoruz. sep = '/' # Kullanıcıdan silmek istediği dizini isteyeceğiz ve dizin adlı değişkene # eşitleyeceğiz. dizin = raw_input("Lütfen Alt Dizin ve Dosyaları Silmek İstediğiniz Dizinin Adını Giriniz: ") # Girilen değerin gerçek bir dizin olup olmadığını kontrol et if os.path.isdir(dizin) == True: # Kullanıcıya bir bildirim yapılıyor print "Dosyalar Siliniyor Lütfen Bekleyiniz..." # Yukarıdaki if koşulunda eğer girilen dizin gerçek valid bir dizin ise # döngüye gir, alt dizin ve dosyaları sil for x in os.listdir(dizin): os.remove(dizin + sep + x) # Döngü bitiminde Kullanıcıya işlem sonucu bildiriliyor print "Dosyalar Silindi." # Eğer kullanıcıdan alınan değer gerçek bir dizin değilse uyarıyoruz else: print "Lütfen geçerli bir dizin adı giriniz" # Fonksiyonumuzu çalıştırıyoruz sil()
Açıklamaları betik üzerinde yaptım. Bu betik *nix türevleri üzerinde çalışıyor. O yüzden windows da çalışmayacaktır.
Kodları bir text editör ile sil.py dosya adında kaydedip konsol da iken python sil.py komutunu vermeniz yeterli olacaktır.
Örnek dosyayı buradan indirebilirsiniz.


Sayın Raiden güzel örnek için teşekkürler
Sanırım ufak bir değişiklikle kodun bütün işletim sistemlerinde çalışması sağlanabilir.
Bildiğiniz gibi os.sep , işletim sisteminin öntanımlı ayırıcısını döndürür. Buradan yola çıkacak olursak:
sep = ‘/’ satırını sep = os.sep
şeklinde değiştirecek olursak bence kod bütün işletim sistemlerinde çalışabilir.
Saygılar, İyi Çalışmalar
uzgunum ama kod claısmıyor.sanırım yaklasım ynalıs yada python versıon farkından olabılır
her neyse os.remove ıcı bos dosyalar ıcın kulanılr
shutil.rmtree kulanmamnın daha dogru olucagı kanısındayım
mutlu kodlar