问题描述
我想用另一个文件夹移动另一个目录中的目录内容。
这是一个例子:
我有./backup
,有base
和test
。现在我想在./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 -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 ...
之前,您需要cd
到backup
目录
注2:如果从备份中获得新文件,请仔细检查backupArchives
目录。