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

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

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

答案1

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

cp -as source target

如果需要过滤,可以使用桀骜zmv。该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'

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

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

相关内容