我想复制 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
}