public LsCommand execute() throws IOException {

        Path path = Paths.get(ls.getPath());
        LsVisitor visitor = new LsVisitor(path, ls.getGlob());
        Files.walkFileTree(path, Collections.EMPTY_SET, ls.getDepth(), visitor);

        this.listing = visitor.getListing();
        // sort listing
        if(ls.getSortOrder().size() > 0) {
            List<Comparator> comparators = new ArrayList<Comparator>();
            Iterator<Ls.OrderBy> it = ls.getSortOrder().iterator();
            while(it.hasNext()) {
                Ls.OrderBy orderBy = it.next();
                if(orderBy.getProperty().equals("name")) {
                    if(orderBy.getOrder() == SortOrder.DESC) {
                        comparators.add(desc(SORT_BY_NAME));
                    } else {
                        comparators.add(SORT_BY_NAME);
                    }
                } else if(orderBy.getProperty().equals("size")) {
                    if(orderBy.getOrder() == SortOrder.DESC) {
                        comparators.add(desc(SORT_BY_SIZE));
                    } else {
                        comparators.add(SORT_BY_SIZE);
                    }
                } else if(orderBy.getProperty().equals("created")) {
                    if(orderBy.getOrder() == SortOrder.DESC) {
                        comparators.add(desc(SORT_BY_CREATED));
                    } else {
                        comparators.add(SORT_BY_CREATED);
                    }
                }
            }
            sortBy(getComparator(comparators.toArray(new Comparator[comparators.size()])));
        }

        return this;
    }