Returns all files from a given path that matches the pattern or list
    of patterns

    @type path: str
    @param path: A path to traverse

    @typ patterns: str|list
    @param patterns: A pattern or a list of patterns to match

    @rtype: list[str]:
    @return: A list of matched files

def find_files(path, patterns):
    """
    Returns all files from a given path that matches the pattern or list
    of patterns

    @type path: str
    @param path: A path to traverse

    @typ patterns: str|list
    @param patterns: A pattern or a list of patterns to match

    @rtype: list[str]:
    @return: A list of matched files
    """
    if not isinstance(patterns, (list, tuple)):
        patterns = [patterns]

    matches = []
    for root, dirnames, filenames in os.walk(path):
        for pattern in patterns:
            for filename in fnmatch.filter(filenames, pattern):
                matches.append(os.path.join(root, filename))
    return matches