mv:“目录不为空” - 如何将目录与 `mv` 合并?

问题描述 投票:0回答:4

我最近尝试将我的个人博客网站部署到我的远程服务器。当我尝试通过执行

mv
将一些文件和目录移动到另一个位置时,发生了一些意外的错误。命令行回显“目录不为空”。在进行了一些谷歌搜索后,我再次尝试使用“-f”开关或“-v”,显示了相同的结果。 我登录的是root账号,流程在这里:

root@danielpan:~# shopt -s dotglob
root@danielpan:~# mv /var/www/html/wordpress/* /var/www/html
mv: cannot move `/var/www/html/wordpress/wp-content` to `/var/www/html/wp-content`: 
Directory not empty
root@danielpan:~# mv -f /var/www/html/wordpress/* /var/www/html
mv: cannot move `/var/www/html/wordpress/wp-content` to `/var/www/html/wp-content`:
Directory not empty

有人知道为什么吗?

(我运行的是 Ubuntu 14.04)

mv
4个回答
35
投票

如果您有子目录并且“mv”不起作用:

cp -R source/* destination/ 
rm -R source/

3
投票

我终于找到了解决办法。因为

/var/www/html/wp-content
已经存在,那么当您尝试在那里复制
/var/www/html/wordpress/wp-content
时,会发生
Directory not Empty
错误。所以你需要将
/var/www/html/wordpress/wp-content/*
复制到
/var/www/html/wp-content
。 只需执行这个:

mv /var/www/html/wordpress/wp-content/* /var/www/html/wp-content
rmdir /var/www/html/wordpress/wp-content
rmdir /var/www/html/wordpress

3
投票

我更喜欢通过

cp
rsync
复制目录,而不是

cd ${source_path}
find . -type d -exec mkdir -p ${destination_path}/{} \;
find . -type f -exec mv {} ${destination_path}/{} \;
cd $oldpwd

移动文件(实际上是重命名它们)并覆盖现有文件。所以速度足够快了。 但是当

${source_path}
包含空子文件夹时,您可以通过
rm -rf ${source_path}

进行清理

0
投票

我通常使用

rsync
进行复印。如果您的硬盘空间不足,并且您的目标文件结构更复杂(因此您不能或不想简单地删除目标文件夹以释放移动空间),您可以使用该选项
--remove-source-files
有关超级用户的此选项的更多信息
rsync
!同步到目标后,它将直接异步删除源文件。所以你不需要双倍的磁盘空间,而在rsyncing过程中只需要相对少量的磁盘空间。重新同步后,传输的文件中的所有磁盘空间都会被释放。这样您就可以通过以下方式更轻松地实现您的目标:

$ rsync -avh --remove-source-files --info=progress2 --size-only /var/www/html/wordpress/* /var/www/html

在本例中,我添加了一个进度条,与所有文件属性进行 rsync 并详细说明它们,并且仅 rsync 大小不同的文件(这里并不重要,因为 rsync“触及”每个文件,因此随后将其删除)

© www.soinside.com 2019 - 2024. All rights reserved.