public static void main(String[] args) throws IOException {
		if (args == null || args.length < 2) {
			System.out.println("Need a source file and a path.");
			System.exit(-1);
		}

		File source = new File(args[0]);
		if (!source.exists() || !source.isFile()) {
			System.out.println("Need a valid source file and a path.");
			System.exit(-1);
		}

		source = source.getCanonicalFile();

		File path = new File(args[1]);
		if (!path.exists() || !path.isDirectory()) {
			System.out.println("Need a valid source file and a path.");
			System.exit(-1);
		}

		String name = source.getName();
		List<File> matches = new LinkedList<File>();

		process(path, name, matches);

		for (File matched : matches) {
			if (matched.getCanonicalFile().compareTo(source) == 0) {
				continue;
			}

			copy(source, matched);
		}

		for (File folder : affectedFolders) {
			touchGrammarsInFolder(folder);
		}
	}