get_num_files is lazy for tarballs; cached after first call