@Override
	public synchronized void moveItem(String folderPath, String name, String newFolderPath,
			String newName) throws IOException, InvalidNameException {

		checkDisposed();

		if (readOnly) {
			throw new ReadOnlyException();
		}

		// Perform move without assigning new storageName

		String oldPath = getPath(folderPath, name);
		String newPath = getPath(newFolderPath, newName);
		boolean success = false;
		indexJournal.open();
		try {
			Folder folder = getFolder(folderPath, GetFolderOption.READ_ONLY);
			Item item = folder.items.get(name);
			if (item == null) {
				throw new FileNotFoundException("Item not found: " + oldPath);
			}

			if (folderPath.equals(newFolderPath) && name.equals(newName)) {
				return;
			}

			testValidName(newFolderPath, true);
			testValidName(newName, false);

			LocalFolderItem folderItem = getItem(folderPath, name);
			if (folderItem == null) {
				throw new FileNotFoundException("Item not found: " + oldPath);
			}
			folderItem.checkInUse();

			Folder newFolder = folder;
			if (!folderPath.equals(newFolderPath)) {
				newFolder = getFolder(newFolderPath, GetFolderOption.CREATE_ALL_NOTIFY);
			}

			LocalFolderItem conflictFolderItem = getItem(newFolderPath, newName);
			if (conflictFolderItem != null) {
				throw new DuplicateFileException("Item already exists: " + newName);
			}

			folderItem.moveTo(item.itemStorage.dir, item.itemStorage.storageName, newFolderPath,
				newName);

			folder.items.remove(name);
			item.parent = newFolder;
			item.itemStorage.itemName = newName;
			item.itemStorage.folderPath = newFolderPath;
			newFolder.items.put(newName, item);

			indexJournal.moveItem(oldPath, newPath);

			success = true;

		}
		catch (NotFoundException e) {
			throw new FileNotFoundException(e.getMessage());
		}
		finally {
			indexJournal.close();
			if (!success) {
				deleteEmptyVersionedFolders(newFolderPath);
			}
		}

		if (folderPath.equals(newFolderPath)) {
			eventManager.itemRenamed(folderPath, name, newName);
		}
		else {
			eventManager.itemMoved(folderPath, name, newFolderPath, newName);
		}

		deleteEmptyVersionedFolders(folderPath);
	}
Deallocate item storage
@param folderPath
@param itemName
Ghidra/Framework/FileSystem/src/main/java/ghidra/framework/store/local/IndexedLocalFileSystem.java