Rsync:是否可以将 src 文件作为符号链接传输并复制 dir 结构的其余部分

use*_*977 6 rsync symlink

我想将 src 目录复制为模板,即保留相同的结构。此模板目录中的文件应作为符号链接指向 src 目录。我不确定 rsync 是否可以开箱即用。

Gil*_*il' 7

Rsync 只能进行复制或(有时)硬链接,不能进行符号链接。cpGNU coreutils的程序可以做你想做的事,至少如果你不需要花哨的 rsync 选项,比如基于文件名的过滤。只需使用-s标志,加上-a递归。

cp -as source target
Run Code Online (Sandbox Code Playgroud)

如果需要过滤,可以使用zshzmv. 该zmv函数默认移动文件,但您可以指定另一个操作-S(创建符号链接,但这对您的用例不利,因为它不复制目录)或-p(指定任意程序,这里我使用一个创建符号链接的函数)任何需要的目录,然后创建一个符号链接)。您可以指定一种模式来限制复制哪些文件;在这里,我^*.dontcopy用来省略带有扩展名的文件,.dontcopy并且(m-7)只处理过去 7 天内修改过的文件,另外^/还省略了要处理的文件列表中的目录。

mkdir_ln () {
  mkdir -p -- $2:t &&
  ln -s -- $1:A $2
}
cd source
zmv -P mkdir_ln -Q '**/^*.dontcopy(m-7^/)' '../target/$f'
Run Code Online (Sandbox Code Playgroud)

上面我使用历史修饰符 (:A)将第一个参数转换为绝对路径。如果要创建相对符号链接,则必须使用正确数量的../组件构建正确的目标路径。

mkdir_ln () {
  mkdir -p -- $2:t &&
  ln -s -- ${1//[^/]##/..}/$1 $2
}
Run Code Online (Sandbox Code Playgroud)