我在 bash 中使用以下内容
cp -r "/wordpress/3.0.1/" "/mySite/"
结果是,/mySite/3.0.1/
但是我不想也不理解为什么3.0.1/
会出现在目标目的地。
我究竟做错了什么?
答案1
cp -r /wordpress/3.0.1/* /mySite
答案2
这与POSIX 规范,其中指出
包含至少一个非斜杠字符并以一个或多个尾随斜杠结尾的路径名应被解析为在路径名后附加一个点字符('.')。
但在Linux下(即使用cp
来自的命令GNU 核心实用程序,cp -r foo/ bar/
表现得像cp -r foo bar/
目录cp -r foo/. bar/
¹ foo
。(GNU coreutils 不是唯一的罪魁祸首,我只是在 OpenBSD 中观察到了同样的行为,而 OpenBSD 通常在标准合规性方面表现良好。)
您可以运行cp -r "/wordpress/3.0.1/." "/mySite/"
(即使用 结束源/.
)来避开该3.0.1/
关卡。另一种可能性是rsync -r "/wordpress/3.0.1/" "/mySite/"
。
另外,如果您不使用 Linux 和 Cygwin 以外的 unices,我建议您养成使用cp -a
而不是的习惯。当您注意到差异时, (保留权限和符号链接)通常是正确的。在其他 unices 上,使用。对于,使用。cp -r
-a
cp -Rp
rsync
-a