start from an absolute path
avoid to rescan each file if its metadata is unchanged
(it may noticeably improve scanning speed)
better function name