Beh.... con OPENDIR vai a controllare le cartelle ed i file presenti in una cartella di partenza (diciamo la root del tuo albero).

Devi poi leggere (READDIR()) quanto trovato nella directory principale per vedere se si tratta di una directory o di un file.
Se si tratta di una directory, allora annidi un altro opendir per aprire anche quella e leggere all'interno.

Questo a livello di concetto.
Onestamente, non ho la più pallida idea se sia un metodo performante o meno, o se ne esistano di migliori.

Intanto puoi arrischiarti a fare delle prove!