Какие каталоги не нужно сканировать
Каталог результата и служебный каталог SafeSort исключены всегда — а символические ссылки не отслеживаются вовсе.
Сканер SafeSort пропускает не только неважные файлы, но и целые каталоги — по двум
разным причинам. Первая: некоторые каталоги заведомо не относятся к пользовательским
файлам — например, .git или .venv.
Вторая, более тонкая: собственный каталог результата, Sorted/,
и служебный каталог самого SafeSort, .safesort/, должны быть
исключены всегда — иначе повторный запуск начал бы сортировать уже
отсортированные файлы и собственные журналы операций.
def excluded_names(self) -> frozenset[str]:
return frozenset({*self.exclude, self.destination, STATE_DIRNAME})
self.exclude — список, который пользователь может изменить через файл настроек, который мы рассмотрим позже. Каталог результата (self.destination, по умолчанию Sorted) и служебный каталог .safesort добавляются в исключения динамически, при каждом вызове — их нельзя случайно убрать из списка исключений через настройки.Символические ссылки: осознанно пропускаются
Символическая ссылка — файл или каталог, который на самом деле указывает на другое место в файловой системе. SafeSort не переходит по символическим ссылкам вообще, ни на файлы, ни на каталоги:
| Почему ссылки пропускаются | Что произошло бы иначе |
|---|---|
| Ссылка может указывать за пределы просканированного каталога | SafeSort мог бы переместить файл, не принадлежащий выбранному каталогу |
| Ссылка на каталог может создать цикл обхода | Рекурсивное сканирование могло бы никогда не завершиться |
| Поведение с симлинками не всегда очевидно даже опытным пользователям | Первая версия программы выбирает предсказуемое поведение вместо более сложного |
Это решение легко проверить: сканер использует entry.is_symlink()
раньше любой другой проверки и, если это символическая ссылка, сразу переходит к
следующему элементу каталога — эта строка уже встречалась в
_scan_dir() на предыдущей странице.