$ novi -a list /some/dir/RPMS
The output isn't much to look at. That will change in the future. The ``list'' option started off as a debugging tool.
Since ``list'' is the default action, you could shorten this commandline to:
$ novi /some/dir/RPMS
The program already looks for files of the pattern ``*.rpm'' so you don't have to specify this on the commandline.
Note that the search for RPM files is NOT recursive; the files must exist just beneath the specified source directory.
$ novi /dir1/RPMS /dir2/RPMS /dir3/RPMS [...] /dirN/RPMS
There's no hard limit on the number of RPMs novi can handle. The only limit should be your system's available memory for the objects, and any upper limits on your C++ implementation's STL containers.
$ novi -a hardlink -t /target/dir /dir1/RPMS [...] /dirN/RPMS
As a reminder, the hard-link only works if all of these directories are on the same filesystem.
Given the significant I/O activity, though, would you really want to copy the RPMs to the target directory? (A single Fedora release can have a couple of gigabytes in RPMs.) By comparison, a hard-link isn't quite so I/O-intensive: it just requires another file pointer in the inode table, which doesn't require reading/writing the file itself.
$ novi -a list repo:/some/dir /some/other/dir
In the above example, novi will load RPM header info from the file
/some/dir/repodata/primary.xml.gz
(It will also read RPMs from /some/other/dir. This demonstrates that you can mix and match directory and repo sources.)
The Repository Metadata Project at http://linux.duke.edu/projects/metadata/ explains the repo metadata format.