Rozdział 23 · Część IV · Wdrażamy SafeSort

Które katalogi nie wymagają przeglądania

Katalog wyników i katalog usług SafeSort zawsze wykluczone — a symboliczne linki nie są w ogóle śledzone.

SafeSort · Część 4 z 6Wdrożenie
Downloads/
report.pdf — ✓ skan
images — ✓ skan/
Sorted — ✕ pomij/
. git — ✕ skip/
. venv — ✕ skip/

Skaner SafeSort pomija nie tylko nieistotne pliki, ale także całe katalogi — z dwóch różnych powodów. Pierwszy: niektóre katalogi z góry nie należą do plików użytkownika — na przykład, .git lub .venv. Druga, bardziej subtelna: własny katalog efektów, Sorted/, oraz katalog usług samego SafeSort, .safesort/powinno być wykluczony zawsze — inaczej powtórka już by się zaczęła sortować Posortowane pliki i niestandardowe dzienniki aktywności.

src/safesort/config.py
def excluded_names(self) -> frozenset[str]:
    return frozenset({*self.exclude, self.destination, STATE_DIRNAME})
Wyjątki konfigurowalne i obowiązkowe — różne zestawy
self.exclude jest lista, którą użytkownik może zmienić w pliku ustawień, co omówimy później. Katalog wyników (self.destination, domyślnie Sorted) oraz katalog usług .safesort są dodawane do wyjątków dynamicznie, przy każdym wywołaniu — nie można ich przypadkowo usunąć z listy wyjątków poprzez ustawienia.

Odsyłacze symboliczne: świadomie pomijane

Symboliczne łącze — plik lub katalog, który w rzeczywistości wskazuje na inne miejsce w systemie plików. SafeSort nie podąża w ogóle za symbolicznymi łączami, ani do plików, ani katalogów:

Dlaczego odnośniki są pomijaneCo by się stało inaczej
Link może wskazywać poza zeskanowany katalogSafeSort mógł przenieść plik, który nie należy do wybranego katalogu
Referencja katalogowa może tworzyć pętlę indeksowaniaRekurencyjne skanowanie mogłoby nigdy się nie zakończyć
Zachowanie związane z linkami symfonicznymi nie zawsze jest oczywiste nawet dla doświadczonych użytkownikówPierwsza wersja programu wybiera przewidywalne zachowanie zamiast bardziej złożonych

To rozwiązanie łatwo sprawdzić: skaner używa entry.is_symlink() przed jakimkolwiek innym sprawdzeniem i, jeśli to symboliczne połączenie, prowadzi od razu do Do kolejnego elementu katalogowego — ten łańcuch znaków już został napotkany w _scan_dir() na poprzedniej stronie.

Praktyka: sprawdzanie wykluczonych katalogów
interaktywny laptop bezpośrednio w przeglądarce – Python 3.14 przez Pyodide, bez instalacji
Otwórz praktykę →
Checkpoint · Issue #1
git commit -m "feat: add directory scanner and configuration"
Zlał się jak Pull Request #15. Ta sama gałąź przy okazji przyniosła podstawowy moduł Config, na którym później opierają się Issues #10 i #11 (strony 23-20–23-22).
Status prawdziwego Project: Done