mv:目录不为空


155

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

这是一个例子:

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

我用这个:

mv ./backup/* ./backupArchives

但我得到了错误

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

我尝试使用--force,但没有运气。文件夹已经存在时,是否可以移动它?

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


您是只是试图将文件夹的内容合并到目标中,还是要覆盖目标中的内容。(如果您有整个错误,而没有使用......截断数据,这也有帮助)
托马斯·沃德

我只想合并内容,没有覆盖。
UdK

2
@UdK即使这可以工作,请注意,这不会合并两个目录的内容。移动目录将替换其目标。请看一下rsync,它将进行合并。
zwets

Answers:


188

尽管其手册页没有对此文档进行说明,但mv如果目标目录包含文件,它将拒绝将目录重命名为另一个目录。在您的情况下,这是一件好事,因为您原来想源的内容合并到目标中,但mv不会这样做。

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

除了使用rsync,您还可以进行经典

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

这会为您带来更多的极客积分。


4
好事情要知道!两者都很好。谢谢!
UdK

5
怪胎积分是最好的积分:D
MadMike

2
应该注意的是,这要求您具有可用空间中的文件夹大小。如果没有的话,将会引起可怕的问题。
Pogrindis

4
@Pogrindis请说明将发生什么可怕的问题,以及这些问题与其他任何写入完整磁盘的尝试有何不同?确实,由于这两个操作都会使原始目录保持完整,因此,如果该操作使您失败rm -rf backupArchives而没有任何后果,更不用说“可怕”的了。
zwets 2014年

4
感谢您命名经典方法,如果rsync不可用,将非常有帮助!也可用于sudo使用sudo sh -c '(cd backup && tar c .) | (cd backupArchives && tar xf -)'
ArendE 2015年


4

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

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/

我正在使用Ubuntu 12.10,并且得到了:mv:invalid option-'R'尝试`mv --help'以获取更多信息。确实.tar很不错,但是我需要知道这种情况下如何移动文件。感谢您的帮助
UdK 2013年

我使用12.04台式机和服务器,两者都工作良好。请小心,如果您没有在folfer和-R之间留空格。我也尝试了不使用-R的情况,对我来说也一样,不使用-R的情况也要尝试,但要小心拼写:Linux会影响大小写字母!!!而不是路径不正确地移动或从位置移动。如果您没有该文件夹,则希望将其移动到-C之后,它将创建它。还请首先尝试:找到文件夹的 -iname 名称, 然后从根目录运行此命令,以查看它是否在其他地方存在(如果您遗漏了拼写错误)。给我您使用的确切命令
Dimitris Theodoridis

thaaa .....把文件名放在**的位置
Dimitris Theodoridis

1
-R肯定不应该在第一个论点之后。选项(几乎)始终位于命令参数之前。另外,mv没有-R选择,最后,递归与无关mv。@DimitrisTheodoridis请先测试您的答案。
zwets

是的,我的兄弟,您说的对,我的拼写总是有问题,而且总而言之,我在找不到该终端或命令时遇到了问题,或者创建了我不知道的新文件和目录,只是为bas拼写...顺便说一句使用cp命令,然后在这里为那个兄弟写了mv sory:D
Dimitris Theodoridis

4

当然rsync可以,但是对于不支持的机器rsync(例如,在cpanel中,默认情况下未安装rsync),这也可以正常工作。

如何使用:

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

然后backup根据需要删除目录

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

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


1

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

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

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

PS:我没有测试每个文件管理器。但是其中大多数应该具有此功能。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.