optimize the dir_walk fun