![将当前目录的内容向上移动一级并递归地覆盖(如果存在)](https://linux22.com/image/142134/%E5%B0%86%E5%BD%93%E5%89%8D%E7%9B%AE%E5%BD%95%E7%9A%84%E5%86%85%E5%AE%B9%E5%90%91%E4%B8%8A%E7%A7%BB%E5%8A%A8%E4%B8%80%E7%BA%A7%E5%B9%B6%E9%80%92%E5%BD%92%E5%9C%B0%E8%A6%86%E7%9B%96%EF%BC%88%E5%A6%82%E6%9E%9C%E5%AD%98%E5%9C%A8%EF%BC%89.png)
我已将 zip 解压到当前位置(我们称之为 )/httpdocs
,zip 内的所有内容都位于我们称之为 的目录中myfiles
。
其中/httpdocs
有数千个目录和文件,它们也存在于与目录中完全相同的路径中myfiles
。
myfiles
我需要将目录的内容移入,/httpdocs
同时递归地替换任何已经存在的目录/文件。
如果我从myfiles
目录尝试:
mv * ../
系统询问我是否要覆盖每个文件(如果存在)... y/n!
如果我尝试从/httpdocs
:
mv myfiles/* .
系统询问我是否要覆盖每个文件(如果存在)... y/n!
如果我尝试应用-f
力运算符,它会返回它无法移动,因为Directory not empty
.
现在,从我读到的内容来看,我想要做的事情似乎无法通过该mv
命令来实现,这可能就是为什么我似乎对此毫无进展的原因。
我知道cp
和rsync
以及许多其他命令,但我不确定哪个命令最适合用于实际将目录的内容移动到另一个位置并递归地覆盖(如果存在)。
我知道我可以通过在任何本地客户端中通过 FTP 上传到/httpdocs
并在覆盖对话框中选择“全部同意”来轻松完成此操作,但这需要很长时间,因此并不总是实用 - 我只是在追求类似的效果确实通过命令行。
答案1
正如下面所讨论的这个问题,该mv
命令不直接提供通过覆盖现有文件来“合并”目录的方法。
cp
和命令rm
可以一起使用作为等效的替代方案。在这种情况下,命令将是:
cd /path/to/httpdocs
cp -r myfiles/* .
rm -r myfiles/
注意:该cp
命令默认覆盖现有文件。 OP 有一个别名干扰了这个过程。该cp
命令的别名为cp -i
,它要求在每次覆盖时进行交互式确认。这可以通过unalias cp
首先运行或使用语法来覆盖\cp -r ..
。