GhidraFolder copyTo(GhidraFolderData newParent, TaskMonitor monitor)
			throws IOException, CancelledException {
		synchronized (fileSystem) {
			if (newParent.fileSystem.isReadOnly()) {
				throw new ReadOnlyException("copyTo permitted to writeable project only");
			}
			if (isAncestor(newParent)) {
				throw new IOException("self-referencing copy not permitted");
			}
			GhidraFolderData newFolderData = newParent.getFolderData(name, false);

			if (newFolderData == null) {
				try {
					newFolderData = newParent.createFolder(name);
				}
				catch (InvalidNameException e) {
					throw new AssertException("Unexpected error", e);
				}
			}
			List<String> files = getFileNames();
			for (String file : files) {
				monitor.checkCancelled();
				GhidraFileData fileData = getFileData(file, false);
				if (fileData != null) {
					fileData.copyTo(newFolderData, monitor);
				}
			}
			List<String> folders = getFolderNames();
			for (String folder : folders) {
				monitor.checkCancelled();
				GhidraFolderData folderData = getFolderData(folder, false);
				if (folderData != null) {
					folderData.copyTo(newFolderData, monitor);
				}
			}
			return newFolderData.getDomainFolder();
		}
	}
Copy this folder into the newParent folder.
@param newParent new parent folder
@param monitor the task monitor
@return the new copied folder
@throws DuplicateFileException if a folder or file by
this name already exists in the newParent folder
@throws IOException thrown if an IO or access error occurs.
@throws CancelledException if task monitor cancelled operation.
Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFolderData.java