mv:目录不为空

我想移动具有相同文件夹的另一个目录中的目录的内容。

这是一个例子:

我有./backup有目录basetest 。 现在我想在./backupArchives移动这些目录。

我用这个:

 mv ./backup/* ./backupArchives 

但我得到了错误

 mv: cannot move './backup/base' to './backupsArchive/base': Directory not empty 

我尝试使用--force ,但没有运气。 当文件夹已经存在时,有没有办法移动它?

注意:我只想合并内容,没有覆盖。

虽然它的手册页没有记录它,但如果目标目录包含文件, mv将拒绝将目录重命名为另一个目录。 在你的情况下,这是一件好事,因为你想要源的内容合并到目标中,而mv不会这样做。

请使用rsync -a backup/ backupArchives/ 。 之后rm -rf backup/*

而不是使用rsync ,你也可以做经典

 (cd backup && tar c .) | (cd backupArchives && tar xf -) 

这会让你获得更多的极客点。

如果你知道你在做什么,快又脏:

 cp -r ./backup/* ./backupArchives && rm -R ./backup/* 

移动目录后,您需要* (代表任何文本或数字)。 例如:

 mv /var/www/* /recovery/wwwrecovery/ 

这就是所有,如果你移动文件,而不是你移动:

mv /var/www/index.php /recovery/index.php

另一种方法是使用tar打包该文件夹内容:

 tar -cvzpf backup.tar.gz /var/www 

然后移动它谎言任何其他文件。 此外,我建议这一步,因为tar压缩它并使其尺寸更小。

要将文件解压缩到另一个文件夹使用

 tar -xvzpf /var/www/ 

如果您需要复制到您不拥有的位置,请确保在您决定使用的任何选项之后使用sudo命令添加命令。

 sudo tar -cvzpf backup.tar.gz /var/www/ 

当然rsync确实有效,但这对于不支持rsync机器也可能有效(即在cpanel中,默认情况下不安装rsync)。

怎么样使用:

 cd /path/to/backup/ && cp -R --parents ./* ../backupArchives 

然后根据需要删除backup目录

注1:在执行cp -R --parents ...之前你需要cdbackup目录 – cp -R --parents ...

注意2:如果从备份中获取了新文件,请仔细检查backupArchives目录。

在提出问题之前,让我们考虑一个简化的案例。

假设在/ home / admin中我们有两个文件夹foobar ,它们具有相同的子目录结构,但每个文件夹中包含不同的文件。 现在我们想将它们合并为一个。 当我们执行mv foo/* bar ,会出现错误mv: directory not empty

我的解决方案是放弃命令行工具并切换到GUI文件管理器,例如dolphin。 当您将foo重命名为dolphin中的bar时,它会为您提供写入目标文件夹的选项,并以交互方式询问您是否覆盖现有文件。 这样可以避免复制和删除,这实际上可以节省您的时间而无需一行代码。

PS:我没有测试那里的每个文件管理器。 但他们中的大多数应该具有此function。