final DirTree walkTo(final Path path) {
		if (path == null) {
			return null;
		}
		DirTree t = this;
		if (path == this.base) {
			return t;
		}
		final String[] walkingPath = path.relativize(this.base).split("/");
		int layer = 0;
		while (layer < walkingPath.length) {
			final String base_ = walkingPath[layer++];
			final DirTree last = t;
			t = t.directories.get(base_);
			if (t == null) {
				t = last;
				synchronized (t) {
					t = t.directories.get(base_);
					if (t == null) {
						t = new DirTree(last, base_);
						last.directories.put(base_, t);
					}
				}
			}
		}
		return t;
	}