我想将 src 目录复制为模板,即保留相同的结构。此模板目录中的文件应作为符号链接指向 src 目录。我不确定 rsync 是否可以开箱即用。
Rsync 只能进行复制或(有时)硬链接,不能进行符号链接。cp
GNU coreutils的程序可以做你想做的事,至少如果你不需要花哨的 rsync 选项,比如基于文件名的过滤。只需使用-s
标志,加上-a
递归。
cp -as source target
Run Code Online (Sandbox Code Playgroud)
如果需要过滤,可以使用zsh的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'
Run Code Online (Sandbox Code Playgroud)
上面我使用历史修饰符 (:A)
将第一个参数转换为绝对路径。如果要创建相对符号链接,则必须使用正确数量的../
组件构建正确的目标路径。
mkdir_ln () {
mkdir -p -- $2:t &&
ln -s -- ${1//[^/]##/..}/$1 $2
}
Run Code Online (Sandbox Code Playgroud)