do not rely on sorted os.walk