Answers:
rsync
是一个功能强大的工具,但不幸的是,它奇怪地对某些路径名挑剔。
如果$DATA
是绝对路径(即,以开头/
),则要使用的正确命令行为:
rsync -a --link-dest=$DATA $DATA/ $DATA/../upgrade_tmp
[现在,仅简要介绍一下rsync
的陌生性。注意尾随/
添加到源参数。这告诉rsync
您使用源目录的内容,而不是源目录本身。(我假设它$DATA
不包含尾部/
。)在这种情况下,我们要使用内容,因此我们添加尾部/
。
另一方面,如果$DATA
是相对路径(即,它不是以开头/
),则Sean R的注释--link-dest
为:链接目标路径是相对于目标路径解释的,因此您将使用以下路径:
rsync -a --link-dest=../`basename $DATA` $DATA/ $DATA/../upgrade_tmp
编辑
最后一点,事实证明,rsync
我给出的第二个命令行应该不管$DATA
绝对路径如何都可以工作,因为basename
它并不关心路径是绝对路径还是相对路径。
ls -ilah
$SOURCE
目录成$TARGET
:DIR这样SOURCE='abs_path_to_backup'; TARGET='.'; rsync -a --link-dest=$(relpath $TARGET $SOURCE) $SOURCE/ $TARGET/
您想要的是“ cp -al”:
cp -al $DATA/ $DATA/../upgrade_tmp/
rsync -a
cp -al
不幸的是我的系统(Mac OS X 10.6)上没有该功能。我会改用pax ...
这个对我有用:
$ rsync --hard-links --recursive --link-dest=/local user@host:/remote/ /local
我使用rsync版本3.1.0。
从人:
-硬链接
告诉rsync在传输中查找硬链接文件,如果没有此选项,则将传输中的硬链接文件视为独立文件。
--link-dest = DIR
不变的文件从DIR硬链接到目标目录。文件在所有保留的属性(例如权限,可能的所有权)中必须相同,以便将文件链接在一起
可以尝试点击以下链接http://www.lessfs.com/wordpress/在COW上有效(写时复制),可以节省时间和空间
首先仅在目的地上创建目录:
rsync -av --include '*/' --exclude '*' /source/ /destination/
然后仅硬链接文件:
cd /source
find . -type f -exec ln -v {} /destination/{} \;
pax
上面的评论中所示的方法,这似乎更容易。
使用选项-H保留硬链接并阅读联机帮助页。