mv:目录不为空
我想移动具有相同文件夹的另一个目录中的目录的内容。
这是一个例子:
我有./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压缩它并使其尺寸更小。
要将文件解压缩到另一个文件夹使用
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
目录 – cp -R --parents ...
注意2:如果从备份中获取了新文件,请仔细检查backupArchives
目录。
在提出问题之前,让我们考虑一个简化的案例。
假设在/ home / admin中我们有两个文件夹foo
和bar
,它们具有相同的子目录结构,但每个文件夹中包含不同的文件。 现在我们想将它们合并为一个。 当我们执行mv foo/* bar
,会出现错误mv: directory not empty
。
我的解决方案是放弃命令行工具并切换到GUI文件管理器,例如dolphin。 当您将foo
重命名为dolphin中的bar
时,它会为您提供写入目标文件夹的选项,并以交互方式询问您是否覆盖现有文件。 这样可以避免复制和删除,这实际上可以节省您的时间而无需一行代码。
PS:我没有测试那里的每个文件管理器。 但他们中的大多数应该具有此function。