add a recursive file search function