mv:目录不为空

mv:目录不为空

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

以下是一个例子:

我有./backup包含目录base和的文件test。现在,我想将这些目录移动到./backupArchives

我用的是这个:

mv ./backup/* ./backupArchives

但我得到了错误

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

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

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

答案1

虽然它的手册页没有记录这一点,但mv如果目标目录包含文件,它将拒绝将目录重命名为另一个目录。这对你来说是一件好事,因为你最终想要合并将源的内容放入目标中,这是mv不行的。

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

除了使用rsync,你也可以使用经典的

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

这将为您赢得更多的极客积分。

答案2

快速而肮脏,如果你知道自己在做什么:

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

答案3

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

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/

答案4

当然rsync可以,但对于不支持的机器rsync(例如,在 cpanel 中,默认情况下未安装 rsync)也可能有效。

那么使用呢:

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

backup然后根据需要删除目录

注意1:在执行之前,你需要cd进入目录backupcp -R --parents ...

注2:仔细检查backupArchives目录是否从备份中获取了新文件。

相关内容