- genfiles – generator plików testowych i struktury katalogów
- Do czego służy genfiles?
- Jak to działa – mechanizm wewnętrzny
- Wymagania
- Instalacja i uruchomienie
- Opcje wiersza poleceń – szczegółowy opis
- Tryb prosty (–file-create)
- Tryb strukturalny (domyślny)
- Statystyki (–stat)
- Przykłady użycia
- 1. Tryb prosty – 10 plików po 256 KB
- 2. Tryb strukturalny – 5 podkatalogów, max 8 plików, max 1024 KB, mieszane typy
- 3. Tylko pliki binarne, 12 podkatalogów, max 4 pliki, max 128 KB
- 4. Tylko pliki tekstowe, 3 podkatalogi, max 12 plików, max 64 KB
- 5. Szybkie generowanie dużej struktury do testów wydajnościowych
- Konwencje nazewnicze
- Szczegóły implementacyjne
- Podsumowanie
genfiles – generator plików testowych i struktury katalogów
genfiles to lekkie narzędzie konsolowe (CLI) służące do generowania plików testowych oraz struktury katalogów. Narzędzie zostało napisane w Pythonie 3.8+ i nie wymaga żadnych zewnętrznych bibliotek, dzięki czemu jest w pełni przenośne – działa na systemach Linux, macOS i Windows.
GitHub: github.com/IgorBrzezek/genfiles
Do czego służy genfiles?
genfiles rozwiązuje problem ręcznego tworzenia danych testowych. Zamiast mozolnie przygotowywać pliki i katalogi, można za jednym poleceniem wygenerować dowolną strukturę. Narzędzie przydaje się w wielu scenariuszach:
- Testy wydajnościowe – generowanie danych do testowania przepustowości dysków, systemów plików lub sieci.
- Ćwiczenia ze storage’em – przygotowywanie realistycznych zestawów danych do testów rozwiązań do przechowywania danych.
- Środowiska demo – szybkie tworzenie struktury katalogów i plików na potrzeby prezentacji.
- Materiały dydaktyczne – generowanie przykładowych danych do ćwiczeń dla studentów i uczniów.
- Testy skanerów AV i archiwizatorów – losowe pliki binarne i tekstowe do testowania programów antywirusowych i archiwizujących.
Jak to działa – mechanizm wewnętrzny
genfiles opiera się na module argparse do obsługi argumentów wiersza poleceń i czystym Pythonie bez zewnętrznych zależności. Program działa w dwóch trybach:
- Tryb prosty (przełącznik
--file-create) – tworzy określoną liczbę plików binarnych o stałym rozmiarze w katalogu głównym. - Tryb strukturalny (domyślny) – tworzy drzewo podkatalogów z losową liczbą plików o losowych rozmiarach i typach.
W trybie strukturalnym każdy plik ma minimalny rozmiar 100 bajtów (stała min_size_bytes), a maksymalny wynika z parametru -k pomnożonego przez 1024. Pliki binarne wypełniane są danymi z os.urandom(), natomiast tekstowe – losowym ciągiem znaków ASCII (litery, cyfry, białe znaki).
Wymagania
- Python 3.8 lub nowszy
- Brak zewnętrznych bibliotek – wszystko działa na standardowej bibliotece Pythona
- System operacyjny: Linux, macOS lub Windows
Instalacja i uruchomienie
Ponieważ genfiles to pojedynczy plik źródłowy, instalacja sprowadza się do pobrania skryptu:
git clone https://github.com/IgorBrzezek/genfiles.git
cd genfiles
python genfiles.py --help
Alternatywnie można pobrać tylko plik genfiles.py i uruchamiać go bezpośrednio.
Opcje wiersza poleceń – szczegółowy opis
| Opcja | Opis | Domyślnie |
|---|---|---|
-d KATALOG |
Nazwa katalogu głównego do utworzenia | wymagane |
-fc N M |
Tryb prosty: utwórz N plików binarnych, każdy o rozmiarze M KB | – |
-n N |
Tryb strukturalny: liczba podkatalogów do utworzenia | – |
-m N |
Maksymalna liczba plików (1..N) w każdym podkatalogu | – |
-k N |
Maksymalny rozmiar pliku w KB | – |
--bin |
Tylko pliki binarne | mieszane |
--txt |
Tylko pliki tekstowe | mieszane |
--mix |
Mieszanka binarnych i tekstowych (~50/50) | tak |
--stat |
Wyświetl statystyki po wygenerowaniu | – |
-h, --help |
Pokaż pomoc | – |
Tryb prosty (–file-create)
W tym trybie program ignoruje opcje -n, -m, -k, --bin, --txt, --mix. Tworzy dokładnie N plików binarnych o jednakowym rozmiarze M KB w katalogu głównym. Pliki nazywane są według schematu fixed_file_001.bin, fixed_file_002.bin itd.
Tryb strukturalny (domyślny)
Tworzy N podkatalogów o nazwach subdir_001, subdir_002 itd. W każdym podkatalogu generuje losowo od 1 do M plików o losowym rozmiarze od 100 bajtów do K*1024 bajtów. Typ pliku (binarny/tekstowy) zależy od wybranego trybu: --bin, --txt lub --mix (domyślnie ~50/50).
Statystyki (–stat)
Po zakończeniu generowania opcja --stat wyświetla podsumowanie: liczbę utworzonych katalogów, plików, łączny rozmiar, średni rozmiar pliku oraz inne szczegóły.
Przykłady użycia
1. Tryb prosty – 10 plików po 256 KB
python genfiles.py -d ./lab/data --file-create 10 256 --stat
Efekt:
./lab/data/
fixed_file_001.bin (256 KB)
fixed_file_002.bin (256 KB)
...
fixed_file_010.bin (256 KB)
2. Tryb strukturalny – 5 podkatalogów, max 8 plików, max 1024 KB, mieszane typy
python genfiles.py -d ./dataset -n 5 -m 8 -k 1024 --mix --stat
Efekt:
./dataset/
subdir_001/
file_001.bin (losowy rozmiar)
file_002.txt (losowy rozmiar)
...
subdir_002/
...
3. Tylko pliki binarne, 12 podkatalogów, max 4 pliki, max 128 KB
python genfiles.py -d ./workload -n 12 -m 4 -k 128 --bin
4. Tylko pliki tekstowe, 3 podkatalogi, max 12 plików, max 64 KB
python genfiles.py -d ./corpus -n 3 -m 12 -k 64 --txt --stat
5. Szybkie generowanie dużej struktury do testów wydajnościowych
python genfiles.py -d ./bench -n 50 -m 20 -k 512 --bin --stat
Tworzy 50 podkatalogów, w każdym do 20 plików binarnych o maksymalnym rozmiarze 512 KB – łącznie nawet do 1000 plików.
Konwencje nazewnicze
| Tryb | Schemat nazewnictwa | Przykład |
|---|---|---|
| Prosty | fixed_file_NNN.bin |
fixed_file_001.bin |
| Strukturalny (katalogi) | subdir_NNN/ |
subdir_005/ |
| Strukturalny (pliki) | file_NNN.bin lub file_NNN.txt |
file_042.txt |
Szczegóły implementacyjne
Wewnętrznie genfiles składa się z kilku kluczowych funkcji:
generate_random_data(size_bytes, is_binary)– generuje losową zawartość pliku: dla binarnychos.urandom(), dla tekstowych ASCII (litery, cyfry, białe znaki).create_files_simple(root_dir, num_files, size_kb)– tworzy N plików binarnych o ustalonym rozmiarze w katalogu głównym.create_structured_files(root_dir, N, M, K, file_type)– tworzy strukturalne drzewo katalogów z plikami.print_simple_statistics(stats)iprint_structured_statistics(stats)– wyświetlają podsumowanie.
Kod jest pisany z użyciem type hints, co ułatwia jego czytanie i rozwijanie. Wersja programu to 1.0.2 (grudzień 2025).
Podsumowanie
genfiles to proste, ale solidne narzędzie do generowania syntetycznych danych testowych. Dzięki dwóm trybom pracy (prostemu i strukturalnemu), wsparciu dla plików binarnych i tekstowych oraz opcjonalnym statystykom, sprawdza się zarówno w codziennej pracy developera, jak i w zautomatyzowanych procesach testowych. Brak zewnętrznych bibliotek i przenośność między platformami czyni go wygodnym wyborem dla każdego, kto potrzebuje szybko przygotować zestaw danych testowych.
Źródła: github.com/IgorBrzezek/genfiles
