Чистка файловой системы регулярно вручную не годится. Автоматизировать их!

Удаление файлов и папок вручную не является увлекательной задачей, как можно подумать. Имеет смысл автоматизировать их.

Вот Python, чтобы сделать нашу жизнь проще. Python является отличным языком программирования для сценариев. Мы собираемся воспользоваться Python, чтобы завершить нашу задачу без каких-либо препятствий. Во-первых, вы должны знать, почему Python является хорошим выбором.

  • Python – самый популярный язык для автоматизации задач
  • Меньше кода по сравнению с другими языками программирования
  • Python совместим со всеми операционными системами. Вы можете запустить один и тот же код в Windows, Linux и Mac.
  • В Python есть модуль os, который помогает нам взаимодействовать с операционной системой. Мы собираемся использовать этот модуль для завершения нашей автоматизации удаления файлов.

Мы можем заменить любые раздражающие или повторяющиеся системные задачи, используя Python. Написание скриптов для выполнения конкретной системной задачи – кекс, если вы знаете Python. Давайте посмотрим на следующий вариант использования.

Примечание: следующие тестируются на Python 3.6+

Удаление файлов / папок старше X дней

Часто вам не нужны старые журналы, и вам необходимо регулярно чистить их, чтобы освободить хранилище. Это может быть что угодно, а не только логи.

У нас есть метод, называемый stat в модуле os, который дает детали последнего доступа (St_atime), модификация (St_mtime), и модификация метаданных (St_ctime) время. Все методы возвращают время в секундах с начала эпохи. Вы можете найти более подробную информацию об эпохе Вот.

Мы будем использовать метод os.walk (путь) для обхода подпапок папки.

Выполните следующие шаги, чтобы написать код для удаления файлов / папок в зависимости от количества дней.

  • Импортировать модули время, ос, шутил
  • Установите путь и дни для переменных
  • Преобразуйте количество дней в секунды, используя time.time () метод
  • Проверьте, существует ли путь или нет, используя os.path.exists (путь) модуль
  • Если путь существует, то получите список файлов и папок, присутствующих в пути, включая подпапки. Используйте метод os.walk (путь), и он вернет генератор, содержащий папки, файлы и подпапки
  • Получить путь к файлу или папке, объединив текущий путь и имя файла / папки, используя метод os.path.join ()
  • Получить CTime от os.stat (путь) метод с использованием атрибута st_ctime
  • Сравните CTime со временем, которое мы рассчитали ранее
  • Если результат больше, чем желаемые дни пользователя, то проверьте, является ли это файл или папка. Если это файл, используйте os.remove (путь) еще использовать shutil.rmtree () метод
  • Если путь не существует, выведите сообщение not found

Давайте посмотрим код подробно.

# импорт необходимых модулей
импорт ОС
импорт шутил
время импорта

# основная функция
def main ():

# инициализация счета
dele_folders_count = 0
dele_files_count = 0

# указать путь
путь = "/ PATH_TO_DELETE"

# укажите дни
дней = 30

# преобразование дней в секунды
# time.time () возвращает текущее время в секундах
секунд = time.time () – (дни * 24 * 60 * 60)

# проверка наличия файла в пути или нет
если os.path.exists (путь):

# перебирать каждую папку и файл в пути
для root_folder, папок, файлов в os.walk (путь):

# сравнение дней
если секунд >= get_file_or_folder_age (root_folder):

# удаление папки
remove_folder (корневая_папка)
delete_folders_count + = 1 # увеличение количества

# разрыв после удаления root_folder
перемена

еще:

# проверка папки из корневой папки
для папки в папках:

# Путь к папке
folder_path = os.path.join (корневая папка, папка)

# сравнение с днями
если секунд >= get_file_or_folder_age (folder_path):

# вызов функции remove_folder
remove_folder (путь_к_каталог)
delete_folders_count + = 1 # увеличение количества

# проверка файлов текущего каталога
для файла в файлах:

# Путь файла
file_path = os.path.join (корневая папка, файл)

# сравнение дней
если секунд >= get_file_or_folder_age (file_path):

# вызов функции remove_file
remove_file (путь_к_файл)
Удаленный_файл_счет + = 1 # счетчик приращений

еще:

# если путь не является каталогом
# сравнение с днями
если секунд >= get_file_or_folder_age (путь):

# вызов файла
remove_file (путь)
Удаленный_файл_счет + = 1 # счетчик приращений

еще:

# файл / папка не найдена
печать (е»"{дорожка}" не найден’)
Удаленный_файл_счет + = 1 # счетчик приращений

печать (е"Всего удалено папок: {удалено_фолдеров_счетом}")
печать (е"Всего удалено файлов: {удалено_файлов_count}")

def remove_folder (путь):

# удаление папки
если не shutil.rmtree (путь):

# сообщение об успехе
печать (е"{путь} успешно удален")

еще:

# сообщение об ошибке
печать (е"Невозможно удалить {путь}")

def remove_file (путь):

# удаление файла
если не os.remove (путь):

# сообщение об успехе
печать (е"{путь} успешно удален")

еще:

# сообщение об ошибке
печать (е"Невозможно удалить {путь}")

def get_file_or_folder_age (path):

# получение ctime файла / папки
# время будет в секундах
ctime = os.stat (путь) .st_ctime

# возвращать время
возврат времени

если __name__ == ‘__main__’:
главный()

Вам необходимо настроить следующие две переменные в приведенном выше коде в соответствии с требованием.

дней = 30
путь = "/ PATH_TO_DELETE"

Удаление файлов размером более X ГБ

Давайте найдем файлы, которые больше определенного размера, и удалим их. Это похоже на приведенный выше скрипт. В предыдущем сценарии мы взяли возраст в качестве параметра, и теперь мы будем принимать размер в качестве параметра для удаления.

# импорт модуля os
импорт ОС

# функция, которая возвращает размер файла
def get_file_size (path):

# получение размера файла в байтах
size = os.path.getsize (path)

# возвращает размер файла
возвращаемый размер

# функция для удаления файла
def remove_file (путь):

# удаление файла
если не os.remove (путь):

# успех
печать (е"{путь} успешно удален")

еще:

# ошибка
печать (е"Невозможно удалить {путь}")

def main ():
# указать путь
путь = "ENTER_PATH_HERE"

# поставить максимальный размер файла в мегабайтах
размер = 500

# проверка, существует ли путь или нет
если os.path.exists (путь):

# преобразование размера в байты
размер = размер * 1024 * 1024

# обход через подпапки
для root_folder, папок, файлов в os.walk (путь):

# перебирать список файлов
для файла в файлах:

# получение пути к файлу
file_path = os.path.join (корневая папка, файл)

# проверка размера файла
if get_file_size (file_path) >= размер:
# вызов функции remove_file
remove_file (путь_к_файл)

еще:

# проверка только если путь к файлу
если os.path.isfile (путь):
# путь не является каталогом
# проверка файла напрямую
если get_file_size (путь) >= размер:
# вызов функции remove_file
remove_file (путь)

еще:

# путь не существует
печать (е"{путь} не существует")

если __name__ == ‘__main__’:
главный()

Настройте следующие две переменные.

путь = "ENTER_PATH_HERE"
размер = 500

Удаление файлов с определенным расширением

Возможен сценарий, когда вы хотите удалить файлы по их типам расширений. Допустим, файл .log. Мы можем найти расширение файла, используя метод os.path.splitext (path). Возвращает кортеж, содержащий путь и расширение файла.

# импорт модуля os
импорт ОС

# основная функция
def main ():

# указать путь
путь = "PATH_TO_LOOK_FOR"

# указать расширение
расширение = ".журнал"

# проверка, существует ли путь или нет
если os.path.exists (путь):

# проверить, является ли путь каталогом или нет
если os.path.isdir (путь):

# перебирать подпапки
для root_folder, папок, файлов в os.walk (путь):

# проверка файлов
для файла в файлах:

# Путь файла
file_path = os.path.join (корневая папка, файл)

# извлечение расширения из имени файла
file_extension = os.path.splitext (file_path) [1]

# проверка file_extension
если расширение == file_extension:

# удаление файла
если нет os.remove (file_path):

# сообщение об успехе
печать (е"{file_path} успешно удален")

еще:

# сообщение об ошибке
печать (е"Невозможно удалить {file_path}")

еще:

# путь не является каталогом
печать (е"{путь} не является каталогом")

еще:

# путь не существует
печать (е"{путь} не существует")

если __name__ == ‘__main__’:
# вызов основной функции
главный()

Не забудьте обновить переменную path и extension в приведенном выше коде, чтобы она соответствовала вашим требованиям..

Я бы предложил протестировать скрипты в среде NON PRODUCTION. Как только вы будете удовлетворены результатами, вы можете запланировать через cron (если используете Linux) его периодическое выполнение для обслуживания. Python отлично подходит для достижения этой цели, и если вы заинтересованы в обучении делать больше, проверьте это Курс удэми.

TAGS:

  • питон

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me