我最近尝试将我的个人博客网站部署到我的远程服务器。当我尝试通过执行
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”不起作用:
cp -R source/* destination/
rm -R source/
我终于找到了解决办法。因为
/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
我更喜欢通过
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}
进行清理
我通常使用
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“触及”每个文件,因此随后将其删除)