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.