docs: public static void moveDir(@NotNull File from, @NotNull File to) throws IOException {
  		Validate.isTrue(isDirExists(from), "%s is not exist or not a dir", from);
  		Validate.notNull(to);
  		Validate.isTrue(!isFileExists(to), "%s is exist but it is a file", to);
  
  		final boolean rename = from.renameTo(to);
  		if (!rename) {
  			if (to.getCanonicalPath().startsWith(from.getCanonicalPath() + File.separator)) {
  				throw new IOException("Cannot move directory: " + from + " to a subdirectory of itself: " + to);
  			}
  			copyDir(from, to);
  			deleteDir(from);
  			if (from.exists()) {
  				throw new IOException("Failed to delete original directory '" + from + "' after copy to '" + to + '\'');
  			}
  		}
  	}