# Clean Desktop

У многих при работе в интернете на жестком диске образуется свалка из файлов. Когда находишь что-то интересное, качаешь этот файл и он продолжает себе лежать в папке Downloads или на рабочем столе.

Особо организованные люди каждый вечер расчищают эти завалы, определяя, что делать с тем или иным файлом, куда его разместить или же просто удалить. Для упрощения данной задачи было написано довольно много программ, причем что интересно, некоторые из них продаются в AppStore.

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

Исходный код размещается в репозитории [clean-desktop](https://github.com/Juev/clean-desktop). Разумеется, что для работы скрипта требуется наличие установленного дистрибутива языка ruby.

По умолчанию скрипт настроен на очистку директории `Desktop`, именно поэтому я решил его назвать именно clean-desktop. Хотя ничто не мешает использовать ее для работы и с другими директориями.

При первом запуске программы в домашней директории создается файл конфигурации `~/.clean` в формате yaml. И для изменения поведения данной программы достаточно изменить этот файл.

Параметр `dir` определяет, какую именно директория будет являться рабочей. Затем приводится несколько отдельных категорий для различных типов файлов (Pictures, Music, Documents, Other), для каждой из которых задается ее расположение и соответствующие ей расширения.

Алгоритм анализа различает отдельные файлы от целых директорий. И если для файлов просто производиться сравнение их расширений с определенными масками для принятия решения о том, куда их переместить, то с директориями все несколько сложнее. Пришлось провести статистический анализ расширений файлов, которые входят в эту директорию и затем, в зависимости от того, какие именно расширения преобладают, принимать решение о дальнейшем их размещении.

Однако возможны случаи, когда алгоритм не может правильно определить категорию, к которой относится директория. К примеру, если загрузить из интернета музыкальный альбом в формате flac. Обычно подобные альбомы представляют собой отдельную директорию, в которой располагаются файлы с музыкой, с описанием альбома, с его обложками и так же помещается файл cue для дальнейшего получения отдельных треков данного альбома. Файлов мало, и все они имеют различные расширения и принять решение о принадлежности данной директории именно к категории Music оказывается довольно сложно.

В подобных случаях файлы и директории просто переносятся в категорию Other, которая была специально для этого создана.

