cp 到带有符号链接的目标层次结构?

est*_*est 4 symbolic-link shell-script cp

我正在尝试编写一个站点部署脚本,它将像这样复制文件:

来源

.
..
src/
html/
Run Code Online (Sandbox Code Playgroud)

目标

.
..
src/
html/ -> /var/www/ftproot/mysite
Run Code Online (Sandbox Code Playgroud)

我希望 SOURCE 中的文件html转到 DEST /var/www/ftproot/mysite

脚本是:

cd SOURCE
cp -Rf * DEST
Run Code Online (Sandbox Code Playgroud)

每次运行脚本时,都会出现此错误:

cp: cannot overwrite non-directory 'html' with directory `html'
Run Code Online (Sandbox Code Playgroud)

由此,我推断cp当 DEST 具有符号链接时无法自动将文件复制到 DEST 中。

笔记:

  1. 按照cp 手册,我设置POSIXLY_CORRECT为 1。这不起作用。

  2. 我不得不将站点链接htmlftproot/mysite而不是反之,因为 ftp 用户有奇怪的访问模式。

  3. 这家伙修改了 cp源代码并重新编译了它。我不想对生产服务器这样做。

关于如何解决这个问题的任何想法?

spa*_*kie 6

对于任何文件复制,我都会建议rsynccp因为它可以更好地控制应该复制什么以及如何复制。在你的情况下,只需给出命令:

cd SOURCE
rsync -K -a . DEST
Run Code Online (Sandbox Code Playgroud)

-K 选项完全符合您的要求:-K, --keep-dirlinks 将接收器上的符号链接目录视为目录